Ошибка кодирования данных - PullRequest
3 голосов
/ 25 апреля 2011

Моя проблема в том, что я получил следующую ошибку кодирования при копировании данных из CSV-файлов в таблицу базы данных.

psycopg2.DataError: неверная последовательность байтов для кодирования "UTF8": 0xf8 СОВЕТ: Эта ошибка также может произойти, если последовательность байтов не соответствует кодировке, ожидаемой сервером, который контролируется "client_encoding".

Я не использую какие-либо команды кодирования и декодирования. И чтобы скопировать данные из файла в таблицу, я использую следующий код.

cur.copy_from(myFile, myTable)

И эти файлы содержат много специальных символов и странных данных. Но я хочу хранить все эти данные.

EDIT

Таблица:

создать таблицу myTable (целое число идентификатора, символ имени меняется (10000));

и образец файла CSV:

 "1";"This is  |_|¨^~~ || ¨text wuth special charater like Bjш;; ø"
 "2";"Test data  -._.- (2010/10/11) "

Ответы [ 3 ]

1 голос
/ 25 апреля 2011

Вы пишете, что не указываете какую-либо кодировку, и похоже, что по умолчанию psycopg2 имеет значение UTF-8 .0xf8 не является допустимой однобайтовой кодовой точкой UTF-8.

Возможно ли ваш исходный файл в ISO-8859-1 , где 0xf8 соответствует ø?

Редактировать:

Есть несколькоместа, где эта проблема может быть решена, и какая из них правильная, зависит от вашей ситуации.

  • Если вам неоднократно придется импортировать файлы ISO-8859-1, возможно, вы захотите работать с кодировкой , чтобы сделать ваш сценарий согласованным.

  • Если вам нужно выполнить этот импорт только один раз, почему бы просто не преобразовать файлы в ожидаемый формат вне Python, например, iconv или recode ?

0 голосов
/ 27 апреля 2011

Если вы хотите сохранить его как есть, вы не можете использовать тип данных персонажа. Или, по крайней мере, не тот, где проверяется правильность кодировки. Похоже, что входные данные не в кодировке UTF8.

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

0 голосов
/ 25 апреля 2011

Какой тип данных столбца в базе данных?Он должен соответствовать тому, что вы хотите поместить.

Если вы хотите хранить байтовые данные, используйте двоичный тип данных.Если вы хотите сохранить текстовые данные, используйте символьный тип данных.

Вы не можете ожидать, что ваша база данных может хранить файл .jpg как текст, просто потому, что он не текст.

...