преобразование специальных символов UTF-16 в UTF-8 - PullRequest
0 голосов
/ 02 февраля 2012

Я работаю в django и Python, и у меня возникают проблемы с сохранением символов utf-16 в PostgreSQL.Есть ли какой-нибудь способ конвертировать utf-16 в utf-8 перед сохранением?

Я использую python 2.6, вот мои фрагменты кода

sample_data="This is the time of year when  Travel & Leisure, TripAdvisor and other travel media trot out their “Best†lists, so I thought I might share my own list of outstanding hotels I’ve had the good fortune to visit over the years."

Выше данные содержат некоторые латинские специальные символы, ноон не отображается правильно, я просто хочу показать эти латинские специальные символы в соответствующих форматах.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Нет таких вещей как "utf-16 символов".Вы должны показать свои данные, используя print repr(data), и сообщить нам, с какими частями ваших данных у вас возникли проблемы.Покажите нам сущность ваших данных, например, repr () из списков «Досуг» - «Лучшие», которые у меня были »

На самом деле у вас есть строка байтов, содержащая закодированный текств UTF-8 .Вот его repr ():

'Leisure \xe2\x80\x9cBest\xe2\x80\x9d lists I\xe2\x80\x99ve had'

В том, что вы показали, вы заметите 3 скопления болтовни.Они соответствуют 3 скоплениям \xhh в отчете.

Clump1 (\xe2\x80\x9c) декодирует в U + 201C ЛЕВАЯ ДВОЙНАЯ КВАЖНАЯ МАРКА.

Скопление 2 равно \xe2\x80\x9d.Обратите внимание, что только первые 2 "латинских специальных символа" aka "guff" появились на вашем дисплее.Это потому, что кодировка вашего терминала cp1252, которая не отображается \ x9d;это просто проигнорировало это.Unicode - это U + 201D RIGHT DOUBLE QUOTATION MARK.

Cump 3: становится U + 2019 RIGHT SINGLE QUOTATION MARK (используется в качестве апострофа).

Так как у вас есть байты в кодировке UTF-8, у вас не должно быть проблем с PostgreSQL.Если вы получаете ошибки, покажите свой код, полное сообщение об ошибке и полный возврат.

Если вам действительно нужно отобразить guff на вашем терминале Windows, print guff.decode('utf8').encode('cp1252') ... просто будьте готовы к юникод-символамкоторые не поддерживаются cp1252.

Обновление в ответ на комментарий У меня нет проблем с сохранением данных, проблема в том, что при отображении на нем отображаются устаревшие символы, так чтоЯ думаю, это преобразование этих данных перед сохранением, я прав?

Примите решение.(1) В своем вопросе вы говорите: «У меня проблемы с сохранением символов utf-16 в PostgreSQL».(2) Теперь вы говорите: «У меня нет проблем с сохранением данных, проблема заключается в том, что при отображении на нем отображаются устаревшие символы»

Краткое содержание: Данные вашего примера кодируются в UTF-8.Если UTF-8 не подходит для PostgreSQL, декодируйте его в Unicode.Если у вас проблемы с отображением, сначала попробуйте отобразить соответствующий Unicode;если это не сработает, попробуйте кодировку, которую будет поддерживать ваш терминал (предположительно, из семейства cp125X.

0 голосов
/ 02 февраля 2012

Это работает для меня, чтобы преобразовать строки: sample_data.decode ('mbcs'). Encode ('utf-8')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...