5

我在 Python 中打印(或写入文件)非 ASCII 字符时遇到问题。我通过str在我自己的对象中覆盖该方法并在其中创建“x.encode('utf-8')”来解决它,其中 x 是对象内部的一个属性。

但是,如果我收到一个第三方对象,并且我制作了“str(object)”,而这个对象里面有一个非 ASCII 字符,它就会失败。

所以问题是:有什么方法可以告诉str方法该对象通常具有 UTF-8 编码?我正在使用 Python 2.5.4。

4

5 回答 5

9

str()在 Python < 3.0 中无法使用 Unicode。

使用repr(obj)而不是str(obj). repr()会将结果转换为 ASCII,正确转义不在 ASCII 代码范围内的所有内容。

除此之外,使用允许 unicode 的文件对象。所以不要在输入端编码,而是在输出端编码:

fileObj = codecs.open( "someFile", "w", "utf-8" )

现在您可以写入 unicode 字符串fileObj,它们将根据需要进行转换。为了使同样的事情发生print,您需要包装sys.stdout

import sys, codecs, locale
print str(sys.stdout.encoding)
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
line = u"\u0411\n"
print type(line), len(line)
sys.stdout.write(line)
print line
于 2009-11-10T11:05:28.390 回答
3

你如何在你的类上使用unicode(object)和定义__unicode__方法?

然后你知道它的 unicode,你可以将它编码成一个文件。

于 2009-11-10T10:51:40.493 回答
3
none_ascii = '''
        ███╗   ███╗ ██████╗ ██╗   ██╗██╗███████╗███████╗ 
        ████╗ ████║██╔═══██╗██║   ██║██║██╔════╝██╔════╝ 
        ██╔████╔██║██║   ██║██║   ██║██║█████╗  ███████╗ 
        ██║╚██╔╝██║██║   ██║╚██╗ ██╔╝██║██╔══╝  ╚════██║ 
        ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗███████║ 
        ╚═╝     ╚═╝ ╚═════╝   ╚═══╝  ╚═╝╚══════╝╚══════╝ 
'''

print(none_ascii.decode('utf-8'))
于 2017-03-01T03:10:34.840 回答
2

我想说我在 Unix 系统中找到了一个解决方案,导出一个环境变量,其中:

导出 LC_CTYPE="es:ES.UTF-8"

这样,所有文件都在 utf-8 中,所以我可以打印或其他任何东西,它工作正常

于 2009-11-10T12:12:07.070 回答
0

只需将这两行粘贴到代码的顶部

  1. #!/usr/local/bin/python
  2. # 编码:latin-1

转到此链接以获取更多详细信息https://www.python.org/dev/peps/pep-0263/

于 2015-05-02T20:20:49.223 回答