2015-01-24 4 views
-1

Использование Python 3.4, предположим, что у меня есть некоторые данные из файла, и это буквально 6 отдельных символов \ u 0 0 C 0, но мне нужно преобразовать его в единственный символ Юникода \ u00C0. Есть ли простой способ сделать это преобразование? Я не могу найти ничего в документации по юникоду Python 3.4, которая, похоже, обеспечивает такое преобразование, за исключением сложного способа использования exec() оператора присваивания, который я хотел бы избежать, если это возможно.Создание символа Юникода в Python 3.4

Спасибо.

+0

Возможный дубликат [Как преобразовать escape-последовательности Unicode в символы Unicode в строке python] (http://stackoverflow.com/questions/990169/how-do-convert-unicode-escape-sequences-to-unicode- characters-in-a-python-string) – tripleee

ответ

0

Ну, есть:

>>> b'\\u00C0'.decode('unicode-escape') 
'À' 

Однако unicode-escape кодек нацелен на конкретный формат кодирования строки, строки Python буквальным. Это может привести к неожиданным результатам, когда сталкиваются с другими escape-последовательностями, которые являются особыми в Python, такими как \xC0, \n, \\ или \U000000C0, и он может не распознавать другие escape-последовательности из других форматов строковых литералов. Он также может неправильно обрабатывать символы вне базовой многоязычной плоскости (например, JSON кодирует U + 10000 для суррогатов \uD800\uDC00).

Так что, если ваши входные данные на самом деле не являются строковым литералом на языке Python, лишенным его разделителей цитат, это неправильная вещь, и это, вероятно, приведет к нежелательным результатам для некоторых из этих случаев. Существует множество форматов, которые используют \u для обозначения символов Unicode; вы должны попытаться выяснить, в каком формате это точно, и использовать декодер для этой схемы. Например, если файл JSON, правильная вещь - использовать анализатор JSON вместо того, чтобы пытаться обрабатывать \u/\n/\\/etc самостоятельно.

+0

Я просто попробовал Python 3.3 и 3.4 и 'unicode-escape' * does * do' \ xc0', '\ n' и \\. –

+0

@Mark: вы правы, поведение кодека 'unicode-escape' изменилось с момента его введения в Py2. Я переформулирую ответ. – bobince

+0

Спасибо. Это решает это для меня. Учитывая, что мои данные в переменной x, я могу использовать байт (x, "utf-8"). Decode ('unicode-escape') и получить именно то, что мне нужно. –

Смежные вопросы