编码问题-python 2.7中的unicode vs.utf-8

时间:2019-06-16 12:58:07

标签: python-2.7 yaml python-idle pyyaml

好吧,我的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__的导入,但是没有用。有人知道如何解决吗?

1 个答案:

答案 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字符取决于您的操作系统及其当前字体。