【问题标题】:Problems in codification - unicode vs. utf-8 in python 2.7编码问题 - python 2.7 中的 unicode 与 utf-8
【发布时间】:2019-10-30 07:46:08
【问题描述】:

好吧,我的 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__ 的导入,但没有成功。有人知道怎么解决吗?

【问题讨论】:

    标签: python-2.7 yaml python-idle pyyaml


    【解决方案1】:

    2.x 中的 Unicode 很痛苦。如果可以,请使用当前的 python 3,其中文本是 unicode,打印时不带 'u' 前缀,而不是字节,现在打印 with 'b' 前缀。

    >>> print(u"pr\xe9senter")  # 3.8
    'présenter'
    

    您还需要一个系统控制台/终端或 IDE,以显示 yaml 文件中代码点的字形。

    如果您是受虐狂或以其他方式卡在 2.7 上,请使用 sys.stdout.write()。请注意,您必须明确写 '\n's。

    >>> import sys; sys.stdout.write(u"pr\xe9senter\n")  # 2.7
    présenter
    

    这个问题与 IDLE 无关。但是,上述行在 Windows 10 和 IDLE 上的标准交互式 Python 中都有效。 IDLE 使用 tkinter,它使用 tcl/tk。 Tk 本身可以处理所有基本多语言平面 (BMP) 字符(前 64K),但只能处理那些。它可以显示哪些 BMP 字符取决于您的操作系统及其当前字体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多