如何在Python中打印非ASCII字符
我在用Python打印或者写入文件时,遇到了处理非ASCII字符的问题。为了解决这个问题,我在自己的对象里重写了str
方法,并在里面加上了“x.encode('utf-8')”,其中x是对象里的一个属性。
但是,如果我收到一个第三方的对象,然后用“str(object)”来处理这个对象,而这个对象里面有非ASCII字符的话,就会出错。
所以我的问题是:有没有办法让str
方法知道这个对象是用UTF-8编码的呢?我现在使用的是Python 2.5.4。
5 个回答
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它没有按照预期工作。这种情况下,通常我们需要查看一些文档或者寻求帮助,看看别人是怎么解决类似的问题的。
在社区论坛,比如StackOverflow,很多人会分享他们遇到的问题和解决方案。通过这些讨论,我们可以学习到很多实用的技巧和经验,帮助我们更好地理解和使用这些工具。
总之,遇到问题时,不要着急,先查找相关的信息,看看有没有人遇到过类似的情况,或者直接向社区求助,通常都会找到解决办法。
none_ascii = '''
███╗ ███╗ ██████╗ ██╗ ██╗██╗███████╗███████╗
████╗ ████║██╔═══██╗██║ ██║██║██╔════╝██╔════╝
██╔████╔██║██║ ██║██║ ██║██║█████╗ ███████╗
██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██║██╔══╝ ╚════██║
██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗███████║
╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚═╝╚══════╝╚══════╝
'''
print(none_ascii.decode('utf-8'))
在Python 3.0之前,str()
无法处理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
我想说我在Unix系统中找到了解决办法,就是通过设置一个环境变量来实现,具体命令是:
export LC_CTYPE="es:ES.UTF-8"
这样一来,所有文件都是用utf-8编码的,所以我可以打印或者做其他操作,效果都很好。