使用 python 强制 UTF-8 输出

Force UTF-8 output using python

我有以下错误:

UnicodeEncodeError: 'ascii' codec can't encode character '\xd7' in position 31: ordinal not in range(128)

来自此代码:

test_string = """
Antelope Canyon, Arizona [1600×1068] </a>&#32; <span class="domain">(<a
"""

print(test_string)

sys.getdefaultencoding 的输出:

In [6]: sys.getdefaultencoding()
Out[10]: 'utf-8'

我正在使用带有油煎面包块的 Chromebook - 如果这会有所不同(我觉得可能会有所不同)。

我不确定是否有某种方法可以 'forcing' 输出这样的字符串,或者只是忽略任何有问题的字符。

terminal or console o redirect cannot handle UTF-8; what environment are you trying to print in.

我正在尝试 运行 在 Spacemacs

中使用 iPython
In [22]: sys.stdout.encoding
Out[27]: 'ANSI_X3.4-1968'

In the shell, what does the command locale output?

在shell中我运行在(iPython在Spacemacs中)命令是未定义的,默认shell用ctrl alt t 输出是

$ locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

在 POSIX 主机上,Python 确定来自 locale 的输出编码,这是一组环境变量,用于传达环境的配置方式各种语言设置。请参阅 locale.getdefaultlocale() function, or more specifically, the locale.getpreferredencoding() 函数。

该函数的输出用于设置 sys.stdout.encoding,然后用于对打印的任何 Unicode 文本进行编码。

您的区域设置为POSIX,这意味着默认编码是ASCII。您需要将该区域设置配置为使用支持所有 Unicode 的编码。我不知道如何为 Chromebook 执行此操作。在我的 Mac 上,大部分地区设置为 en_US.UTF-8,因此我的终端支持所有 Unicode 标准。您可以通过设置 export LC_CTYPE=en_US.UTF-8.

来强制执行此问题

您可以通过设置 PYTHONIOENCODING environment variable 来覆盖 Python 的选择。

请注意,在最近的 Python 3 版本中,sys.stdoutsys.stderr 使用 backslashescape error handler,它将您的控制台无法处理的任何字符替换为标准\xhh\uhhhh\Uhhhhhhhh 转义序列;所以你会看到:

而不是异常
Antelope Canyon, Arizona [1600\xd71068] </a>&#32; <span class="domain">(<a 

啊,找啊找啊,找到了this。正如它所说,也许你可以试试:

  1. 编辑(先创建)/etc/locale.gen 文件。
  2. 在其中写入以下文字:

    en_GB.UTF-8 UTF-8
    LC_ALL="en_GB.UTF-8"
    
  3. 也许可以尝试重启 Chromebook。

然后检查 locale 命令的输出。