Нет таких вещей как "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
.