Проблемы в кодификации - Unicode против UTF-8 в Python 2.7 - PullRequest
1 голос
/ 16 июня 2019

Итак, мой скрипт на python должен открывать все файлы yaml utf-8 в каталоге и показывать содержимое пользователю.Но есть слова с графическим акцентом, слова на французском, такие как 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 голосов
/ 16 июня 2019

Юникод в 2.х больно. Если вы можете, используйте текущий Python 3, в котором текст является Unicode, печатается без префикса 'u', вместо байтов, который теперь печатается с a префиксом '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. Однако приведенные выше строки работают как в стандартном интерактивном Python в Windows 10, так и в IDLE. IDLE использует tkinter, который использует tcl / tk. Сам Tk может обрабатывать все символы базовой многоязычной плоскости (BMP) (первые 64K), но только те. Какие символы BMP могут отображаться, зависит от вашей ОС и текущих шрифтов.

...