我在 Python 中打印(或写入文件)非 ASCII 字符时遇到问题。我通过str
在我自己的对象中覆盖该方法并在其中创建“x.encode('utf-8')”来解决它,其中 x 是对象内部的一个属性。
但是,如果我收到一个第三方对象,并且我制作了“str(object)”,而这个对象里面有一个非 ASCII 字符,它就会失败。
所以问题是:有什么方法可以告诉str
方法该对象通常具有 UTF-8 编码?我正在使用 Python 2.5.4。
我在 Python 中打印(或写入文件)非 ASCII 字符时遇到问题。我通过str
在我自己的对象中覆盖该方法并在其中创建“x.encode('utf-8')”来解决它,其中 x 是对象内部的一个属性。
但是,如果我收到一个第三方对象,并且我制作了“str(object)”,而这个对象里面有一个非 ASCII 字符,它就会失败。
所以问题是:有什么方法可以告诉str
方法该对象通常具有 UTF-8 编码?我正在使用 Python 2.5.4。
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
你如何在你的类上使用unicode(object)
和定义__unicode__
方法?
然后你知道它的 unicode,你可以将它编码成一个文件。
none_ascii = '''
███╗ ███╗ ██████╗ ██╗ ██╗██╗███████╗███████╗
████╗ ████║██╔═══██╗██║ ██║██║██╔════╝██╔════╝
██╔████╔██║██║ ██║██║ ██║██║█████╗ ███████╗
██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██║██╔══╝ ╚════██║
██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗███████║
╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚═╝╚══════╝╚══════╝
'''
print(none_ascii.decode('utf-8'))
我想说我在 Unix 系统中找到了一个解决方案,导出一个环境变量,其中:
导出 LC_CTYPE="es:ES.UTF-8"
这样,所有文件都在 utf-8 中,所以我可以打印或其他任何东西,它工作正常
只需将这两行粘贴到代码的顶部
转到此链接以获取更多详细信息https://www.python.org/dev/peps/pep-0263/