Покажите оставленную строку Unicode в Python

я только что знал Python в течение нескольких дней. Unicode, кажется, проблема с Python.

у меня есть хранилища текстового файла текстовая строка как это

'\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1'

я могу считать файл и распечатать строку, но это отображается неправильно. Как может я распечатывать его для экранирования правильно следующим образом:

"Đèn đỏ nút giao thông Ngã tư Láng Hạ"

Заранее спасибо

9
задан Charles Stewart 18 May 2010 в 08:48
поделиться

3 ответа

>>> x=r'\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1'
>>> u=unicode(x, 'unicode-escape')
>>> print u
Đèn đỏ nút giao thông Ngã tư Láng Hạ

Это работает на Mac, где Terminal.App правильно устанавливает для sys.stdout.encoding значение utf-8 . Если ваша платформа не устанавливает этот атрибут правильно (или вообще), вам необходимо заменить последнюю строку на

print u.decode('utf8')

или любую другую кодировку, которую использует ваш терминал / консоль.

Обратите внимание, что в первой строке я назначаю необработанный строковый литерал, чтобы «escape-последовательности» не раскрывались - это просто имитирует то, что произошло бы, если бы строка байтов x считывалась из (text или двоичный) файл с этим буквальным содержанием.

8
ответ дан 4 December 2019 в 21:48
поделиться

Это помогает показать простой пример с кодом и вывести то, что вы явно пробовали. Предположительно ваша консоль не поддерживает вьетнамский язык. Вот несколько вариантов:

# A byte string with Unicode escapes as text.
>>> x='\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1'

# Convert to Unicode string.
>>> x=x.decode('unicode-escape')
>>> x
u'\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1'

# Try to print to my console:
>>> print x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\dev\python\lib\encodings\cp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0110' in position 0:
  character maps to <undefined>

# My console's encoding is cp437.
# Instead of the default strict error handling that throws exceptions, try:
>>> print x.encode('cp437','replace')
?èn ?? nút giao thông Ng? t? Láng H?    

# Six characters weren't supported.
# Here's a way to write the text to a temp file and display it with another
# program that supports the UTF-8 encoding:
>>> import tempfile
>>> f,name=tempfile.mkstemp()
>>> import os
>>> os.write(f,x.encode('utf8'))
48
>>> os.close(f)
>>> os.system('notepad.exe '+name)

Надеюсь, это вам поможет.

1
ответ дан 4 December 2019 в 21:48
поделиться

Попробовать

>>> s=u"\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1"
>>> print s
=> Đèn đỏ nút giao thông Ngã tư Láng Hạ
0
ответ дан 4 December 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: