好吧,我的python脚本应该打开目录中的所有utf-8 yaml文件并向用户显示内容。但是,有些带有图形重音的单词,法语单词(例如présenter)显示如下:u“ pr \ xe9senter。我需要将它正确显示给用户。
这是我的代码:
import glob
files = glob.glob("data/*.yaml")
def read_yaml_file(filename):
with open(filename, 'r') as stream:
try:
print(yaml.safe_load(stream))
except yaml.YAMLError as exc:
print(exc)
for file in files:
read_yaml_file(file)
我已经尝试使用来自__future__
的导入,但是没有用。有人知道如何解决吗?
答案 0 :(得分:0)
2.x中的Unicode很痛苦。如果可以的话,请使用当前的python 3,其中的文本是unicode,打印时没有'u'前缀,而不是字节,现在打印了 带有'b'前缀的字节。
>>> print(u"pr\xe9senter") # 3.8
'présenter'
您还需要一个系统控制台/终端或IDE,用于显示yaml文件中代码点的字形。
如果您是受虐狂或以其他方式陷入2.7,请使用sys.stdout.write()。请注意,您必须明确地写'\ n'。
>>> import sys; sys.stdout.write(u"pr\xe9senter\n") # 2.7
présenter
这个问题与IDLE无关。但是,以上代码行适用于Windows 10上的标准交互式Python和IDLE。 IDLE使用tkinter,后者使用tcl / tk。 Tk本身可以处理所有基本多语言平面(BMP)字符(前64K),但只能处理这些字符。它可以显示哪些BMP字符取决于您的操作系统及其当前字体。