使用 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>  <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.stdout
和 sys.stderr
使用 backslashescape
error handler,它将您的控制台无法处理的任何字符替换为标准\xhh
、\uhhhh
和 \Uhhhhhhhh
转义序列;所以你会看到:
而不是异常
Antelope Canyon, Arizona [1600\xd71068] </a>  <span class="domain">(<a
啊,找啊找啊,找到了this。正如它所说,也许你可以试试:
- 编辑(先创建)
/etc/locale.gen
文件。
在其中写入以下文字:
en_GB.UTF-8 UTF-8
LC_ALL="en_GB.UTF-8"
也许可以尝试重启 Chromebook。
然后检查 locale
命令的输出。
我有以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xd7' in position 31: ordinal not in range(128)
来自此代码:
test_string = """
Antelope Canyon, Arizona [1600×1068] </a>  <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
中使用 iPythonIn [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.stdout
和 sys.stderr
使用 backslashescape
error handler,它将您的控制台无法处理的任何字符替换为标准\xhh
、\uhhhh
和 \Uhhhhhhhh
转义序列;所以你会看到:
Antelope Canyon, Arizona [1600\xd71068] </a>  <span class="domain">(<a
啊,找啊找啊,找到了this。正如它所说,也许你可以试试:
- 编辑(先创建)
/etc/locale.gen
文件。 在其中写入以下文字:
en_GB.UTF-8 UTF-8 LC_ALL="en_GB.UTF-8"
也许可以尝试重启 Chromebook。
然后检查 locale
命令的输出。