如何在Python中打印非ASCII字符

7 投票
5 回答
29257 浏览
提问于 2025-04-15 15:51

我在用Python打印或者写入文件时,遇到了处理非ASCII字符的问题。为了解决这个问题,我在自己的对象里重写了str方法,并在里面加上了“x.encode('utf-8')”,其中x是对象里的一个属性。

但是,如果我收到一个第三方的对象,然后用“str(object)”来处理这个对象,而这个对象里面有非ASCII字符的话,就会出错。

所以我的问题是:有没有办法让str方法知道这个对象是用UTF-8编码的呢?我现在使用的是Python 2.5.4。

5 个回答

4

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它没有按照预期工作。这种情况下,通常我们需要查看一些文档或者寻求帮助,看看别人是怎么解决类似的问题的。

在社区论坛,比如StackOverflow,很多人会分享他们遇到的问题和解决方案。通过这些讨论,我们可以学习到很多实用的技巧和经验,帮助我们更好地理解和使用这些工具。

总之,遇到问题时,不要着急,先查找相关的信息,看看有没有人遇到过类似的情况,或者直接向社区求助,通常都会找到解决办法。

none_ascii = '''
        ███╗   ███╗ ██████╗ ██╗   ██╗██╗███████╗███████╗ 
        ████╗ ████║██╔═══██╗██║   ██║██║██╔════╝██╔════╝ 
        ██╔████╔██║██║   ██║██║   ██║██║█████╗  ███████╗ 
        ██║╚██╔╝██║██║   ██║╚██╗ ██╔╝██║██╔══╝  ╚════██║ 
        ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗███████║ 
        ╚═╝     ╚═╝ ╚═════╝   ╚═══╝  ╚═╝╚══════╝╚══════╝ 
'''

print(none_ascii.decode('utf-8'))
10

在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
2

我想说我在Unix系统中找到了解决办法,就是通过设置一个环境变量来实现,具体命令是:

export LC_CTYPE="es:ES.UTF-8"

这样一来,所有文件都是用utf-8编码的,所以我可以打印或者做其他操作,效果都很好。

撰写回答