Вы можете преобразовать строки в отладочном представления с не-ASCII, непечатные символы преобразуются в управляющие последовательности с использованием ascii()
function:
Как repr()
, верните строку, содержащую печатаемое представление объекта, но избегайте символов, отличных от ASCII, в строке, возвращаемой repr()
, с использованием , \u
или \U
экранов.
Для кодовых точек Unicode в диапазоне U + 0100-U + FFFF используется \uhhhh
escapes; для диапазона Latin-1 (U + 007F-U + 00FF) \xhh
вместо этого используются escape-последовательности. Обратите внимание, что вывод квалифицируется как допустимый синтаксис Python, чтобы заново создать строку, так что котировки включены:
>>> print('你好')
你好
>>> print(ascii('你好'))
'\u4f60\u597d'
>>> print(ascii('ASCII is not changed, Latin-1 (åéîøü) is, as are all higher codepoints, such as 你好'))
'ASCII is not changed, Latin-1 (\xe5\xe9\xee\xf8\xfc) is, as are all higher codepoints, such as \u4f60\u597d'
Если необходимо иметь \uhhhh
за все, что вам придется сделать свой собственный переоборудованию:
import re
def escape_unicode(t, _p=re.compile(r'[\u0080-\U0010ffff]')):
def escape(match):
char = ord(match.group())
return '\\u{:04x}'.format(char) if char < 0x10000 else '\\U{:08x}'.format(char)
return _p.sub(escape, t)
выше функция не не добавить кавычки как функция ascii()
делает:
>>> print(escape_unicode('你好'))
\u4f60\u597d
>>> print(escape_unicode('ASCII is not changed, Latin-1 (åéîøü) is, as are all higher codepoints, such as 你好'))
ASCII is not changed, Latin-1 (\u00e5\u00e9\u00ee\u00f8\u00fc) is, as are all higher codepoints, such as \u4f60\u597d
@jDo Что в имени бога являются вы даже говорите? – AlanSTACK
Строки в Python 3 должны использовать utf-8 по умолчанию. Правильное исправление заключается в том, чтобы выяснить, почему ваша строка находится в ASCII, а не utf-8 и исправлена это. – Carpetsmoker
@ Алан да, я не знаю. Я удалю этот бесполезный комментарий: D Но не могли бы вы все еще использовать обработку исключений таким образом и просто заменить немой оператор печати чем-то другим? (при условии, что вы не хотите исправлять ошибку кодирования, как предлагает Carpetsmoker) – jDo