2010-04-06 60 views
2

我的服務器上有unichr()問題。請看下面:python unichr問題

我的服務器上(Ubuntu的9.04):

>>> print unichr(255) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in position 0: ordinal not in range(128) 

在我的桌面(Ubuntu的9.10):

>>> print unichr(255) 
ÿ 

我是相當新的Python,所以我不知道如何解決這個問題。任何人都在意幫忙嗎?謝謝。

+0

相關:http://stackoverflow.com/questions/2389410/python-string-decoding-issue – codeape 2010-04-06 09:31:05

回答

2

服務器上的終端設置不同,可能設置爲7位US ASCII。

2

這不是真的unichr()有關。問題在於服務器環境中的語言環境設置,因爲它可能設置爲類似於en_US,並且它不是unicode意識。

+0

這可能是它,因爲我得到當我執行代碼槽相同的結果一個.py文件。你知道我需要做些什麼來改變它嗎? – jacob 2010-04-06 08:14:23

+0

嘗試$ export LANGUAGE =「en_US.UTF-8」 – 2010-04-06 08:42:42

1

打印操作系統設置不統一的unicode字符串時,請考慮使用明確的encoding

unicode.encode([encoding[, errors]])

返回字符串的編碼版本。默認編碼是當前的默認字符串編碼。可能會給出錯誤來設置不同的錯誤處理方案。錯誤的默認值是'strict',這意味着編碼錯誤會引發UnicodeError。其他可能的值有'ignore','replace','xmlcharrefreplace','backslashreplace'以及通過codecs.register_error()註冊的任何其他名稱,請參見編解碼器基類。有關可能的編碼列表,請參見標準編碼部分。

例如,

>>> print unichr(0xff).encode('iso8859-1') 
����?? 
>>> 
6

當使用 「print」 的關鍵字,你會被寫入sys.stdout輸出流。如果可以使用str(message)將字符轉換爲ascii,則sys.stdout通常只能顯示Unicode字符串。

打印時需要編碼到操作系統的終端編碼才能執行此操作。

locale模塊有時會檢測輸出控制檯的編碼:

import locale 
print unichr(0xff).encode(locale.getdefaultlocale()[1], 'replace') 

,但它通常是最好只指定自己的編碼,因爲蟒蛇經常得到它錯了:

print unichr(0xff).encode('latin-1', 'replace') 

UTF -8或拉丁-1我認爲經常用於許多現代Linux發行版。

如果你知道你的控制檯的編碼,該線下方會自動編碼Unicode字符串當您使用「print」:

import sys 
import codecs 
sys.stdout = codecs.getwriter(ENCODING)(sys.stdout) 

如果編碼爲ASCII或類似的東西,你可能需要改變您的操作系統的控制檯編碼能夠顯示該字符。

參見:http://wiki.python.org/moin/PrintFails