Символ с байтовой последовательностью 0x9d в кодировке "WIN1252" не имеет эквивалента в кодировке "UTF8"
Я читаю файл csv в своем sql-скрипте и копирую его данные в таблицу sql-postgre. Строка кода ниже:
\copy participants_2013 from 'C:/Users/Acrotrend/Desktop/mip_sahil/mip/reelportdata/Participating_Individual_Extract_Report_MIPJunior_2013_160414135957.Csv' with CSV delimiter ',' quote '"' HEADER;
Я получаю следующую ошибку: символ с байтовой последовательностью 0x9d в кодировке "WIN1252" не имеет эквивалента в кодировке "UTF8".
Может ли кто-нибудь помочь мне в решении этой проблемы и как я могу ее решить?
Ответы
Ответ 1
Проблема в том, что 0x9D
не является допустимым байтовым значением в WIN1252. Здесь есть таблица: https://en.wikipedia.org/wiki/Windows-1252
Проблема может заключаться в том, что вы импортируете файл UTF-8, а postgresql по умолчанию работает с Windows-1252 (который, по моему мнению, по умолчанию используется во многих системах Windows).
Вам нужно изменить набор символов в командной строке Windows, прежде чем запускать скрипт с помощью chcp. Или в postgresql вы можете:
SET CLIENT_ENCODING TO 'utf8';
Перед импортом файла.
Ответ 2
Любая кодировка имеет числовые диапазоны действительного кода. Вы уверены, что ваши данные в кодировке win1252?
Postgres очень строг и не импортирует никаких возможных кодированных файлов. Вы можете использовать iconv
который может работать в толерантном режиме, и он может удалить сломанные символы. После очистки iconv
вы можете импортировать файл.
Ответ 3
Просто укажите encoding 'UTF-8'
в качестве кодировки в команде \copy
, например (я разбил ее на две строки для удобства чтения, но держу все в одной строке):
\copy dest_table from 'C:/src-data.csv'
(format csv, header true, delimiter ',', encoding 'UTF8');
Больше деталей:
Проблема заключается в том, что для Client Encoding установлено значение WIN1252
, скорее всего потому, что оно работает на компьютере с Windows, но в файле есть символ UTF-8
.
Вы можете проверить кодировку клиента с помощью
SHOW client_encoding;
client_encoding
-----------------
WIN1252