2015-12-07 54 views
1

输出,我有以下错误:强制UTF-8使用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 - 如果这有所作为(我有一种感觉可能)。

我不确定是否有某种方式“强制”这样的字符串输出,或者只是忽略任何有问题的字符。

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

我想

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

In the shell, what does the command locale output?

在我(在Spacemacs IPython中)内运行此命令是不确定的外壳,在默认内Spacemacs运行此使用IPython的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= 
+3

啊,'×'是U + 00D7字符。 –

+0

@MartijnPieters的欢呼声 - 我想这可能是一些Chromebook相关的问题,因为一切看起来很时髦这里http://www.ltg.ed.ac.uk/~richard/unicode-sample-3-2.html,不是确定如何确认,因为这是我目前有权访问 – baxx

+0

您的终端或控制台o重定向无法处理UTF-8;你在什么环境下打印*。 –

回答

2

在POSIX主机上,Python决定了ou从语言环境输入编码,这是一组环境变量,用于传达如何为各种语言设置配置环境。请参阅locale.getdefaultlocale() function,或更具体地说,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 
+0

我应该能够从这里得到它,谢谢 – baxx

1

啊,搜索和搜索之后,我发现this。正如它说的,也许你可以尝试:

  1. 编辑(创建它)/etc/locale.gen文件。
  2. 写了以下文字:

    en_GB.UTF-8 UTF-8 
    LC_ALL="en_GB.UTF-8" 
    
  3. 也许尝试重新启动的Chromebook。

然后检查locale命令的输出。