2016-10-07 36 views
0

У меня есть текстовый файл, который заполняется символами unicode как "\ud83d\udca5", но python, похоже, им не нравится.
Но если я заменил его на u'\U0001f4a5', который, кажется, является его стилем побега на питоне (Charbase), он работает.Как преобразовать « uxxxx uxxxx» в u ' Uxxxxxxxx'?

Есть ли решение для преобразования всех их в формат вывода u"\Uxxxxxxxx", чем может понять python?

Спасибо.

+1

Это потому, что это UTF-16, а не UTF-8. – Joey

+0

@Joey: Это не целая точка. Существует фундаментальное различие между объектом Unicode и кодированной последовательностью байтов (кодируется UTF-16, UTF-8 или любым другим). –

+0

Да, я так думаю, но у меня есть символы UTF-16 в файле UTF-8. В этом проблема. – DasFranck

ответ

0

Вы смешиваете Unicode и закодированные строки. u'\U0001f4a5' - объект Unicode, внутренний тип данных Python для обработки строк. (В Python 3 u не является обязательным, так как теперь все строки являются объектами Unicode).

Файлы, с другой стороны, используют кодировки. UTF-8 является наиболее распространенным, но это всего лишь одно из средств хранения объекта Unicode в байт-ориентированном файле или потоке. При открытии такого файла вам нужно указать кодировку, чтобы Python мог перевести байты в значимые объекты Unicode.

В вашем случае, кажется, вам нужно открыть файл, используя кодек UTF-16 вместо UTF-8.

with open("myfile.txt", encoding="utf-16") as f: 
    s = f.read() 

даст вам надлежащее содержание, если кодек на самом деле UTF-16. Если это не правильно, попробуйте "utf-16-le" или "utf-16-be".

+0

Ну, я пытался, но когда я открываю файл с '' 'utf-16''', у меня есть: ' '' UnicodeDecodeError: 'utf-16-le' codec не может декодировать байты в позиции 9526- 9527: незаконный UTF-16 суррогат'''. То же самое с '' 'utf-16-be''', я могу открыть его с' '' utf-8''', но с проблемой \ uxxxx \ uxxxx. – DasFranck

+0

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