【问题标题】:python unichr problempython unichr问题
【发布时间】:2010-04-06 08:07:31
【问题描述】:

我的服务器上的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相当陌生,所以我不知道如何解决这个问题。有人愿意帮忙吗?谢谢。

【问题讨论】:

标签: python unicode ubuntu


【解决方案1】:

使用“print”关键字时,您将写入sys.stdout 输出流。如果字符可以使用str(message) 转换为 ascii,sys.stdout 通常只能显示 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这并不是真正的 unichr() 相关。问题在于您的服务器环境中的语言环境设置,因为它可能设置为 en_US 之类的东西,并且它不支持 unicode。

      【讨论】:

      • 可能就是这样,因为当我通过 .py 文件执行代码时得到相同的结果。你知道我需要做什么来改变这个吗?
      • 试试 $ export LANGUAGE="en_US.UTF-8"
      【解决方案4】:

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

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

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

      例如,

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 2021-09-22
        • 2010-12-12
        • 2011-08-24
        • 2012-05-26
        相关资源
        最近更新 更多