2015-12-07 82 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命令的輸出。