我在Python中打印(或写入文件)非ASCII字符时遇到问题。我通过覆盖我自己的对象中的str
方法并在其中创建“x.encode('utf-8')”来解决它,其中x是对象内的属性。
但是,如果我收到第三方对象,并且我创建了“str(object)”,并且此对象内部有非ASCII字符,则它将失败。
所以问题是:有没有办法告诉str
方法对象有一个UTF-8编码,一般来说?我正在使用Python 2.5.4。
答案 0 :(得分:8)
没有办法让str()
在Python中使用Unicode< 3.0。
使用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
答案 1 :(得分:3)
您如何使用unicode(object)
并在课程中定义__unicode__
方法?
然后你知道它的unicode,你可以将它编码到任何你想要的文件。
答案 2 :(得分:3)
none_ascii = '''
███╗ ███╗ ██████╗ ██╗ ██╗██╗███████╗███████╗
████╗ ████║██╔═══██╗██║ ██║██║██╔════╝██╔════╝
██╔████╔██║██║ ██║██║ ██║██║█████╗ ███████╗
██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██║██╔══╝ ╚════██║
██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗███████║
╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚═╝╚══════╝╚══════╝
'''
print(none_ascii.decode('utf-8'))
答案 3 :(得分:2)
我想说我在Unix系统中找到了一个解决方案,导出了一个环境var,用这个:
导出LC_CTYPE =“es:ES.UTF-8”
这样,所有文件都是utf-8,所以我可以制作打印件或其他什么,它可以正常工作