python unichr问题

时间:2010-04-06 08:07:31

标签: python unicode ubuntu

我的服务器上有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的新手,所以我不知道如何解决这个问题。有人在乎帮忙吗?谢谢。

4 个答案:

答案 0 :(得分:6)

使用“print”关键字时,您将写入sys.stdout输出流。如果可以使用sys.stdout将字符转换为ascii,则str(message)通常只能显示Unicode字符串。

打印时,您需要对操作系统的终端编码进行编码才能执行此操作。

locale模块有时可以检测输出控制台的编码:

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

但通常最好自己指定编码,因为python经常出错:

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

UTF-8或latin-1我认为在许多现代Linux发行版中经常使用。

如果您知道控制台的编码,当您使用“print”时,下面的行将自动编码Unicode字符串:

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

如果编码是ascii或类似的,您可能需要更改操作系统的控制台编码才能显示该字符。

另请参阅:http://wiki.python.org/moin/PrintFails

答案 1 :(得分:2)

服务器上的终端设置不同,可能设置为7位US ASCII。

答案 2 :(得分:2)

unichr()无关。问题在于服务器环境中的语言环境设置,因为它可能设置为en_US,并且不能识别unicode。

答案 3 :(得分:1)

在打印操作系统设置不统一的unicode字符串时,请考虑使用显式encoding

  

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

     

返回字符串的编码版本。默认编码是当前的默认字符串编码。可以给出错误以设置不同的错误处理方案。错误的默认值是'strict',这意味着编码错误会引发UnicodeError。其他可能的值是'ignore','replace','xmlcharrefreplace','backslashreplace'以及通过codecs.register_error()注册的任何其他名称,请参阅Codec Base Classes部分。有关可能的编码列表,请参阅标准编码部分。

例如,

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