我的服务器上有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 :(得分: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或类似的,您可能需要更改操作系统的控制台编码才能显示该字符。
答案 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')
����??
>>>