2015-11-19 6 views
1

В настоящее время я работаю над проектом эликсира, который анализирует XML из API и вставки данных в Postgres, используя postgrexElixir - Postgres: неверная последовательность байт для кодирования "UTF8

Большинство вставок работают хорошо, однако для. нечетные вставки я получаю эту ошибку. Я видел много других людей, сталкивающихся эту ошибку, но я не уверен, как решить эту проблему в эликсира.

23:52:32.402 [error] Process #PID<0.224.0> raised an exception 
** (KeyError) key :constraint not found in: %{code: :character_not_in_repertoire, file: "wchar.c", line: "2011", message: "invalid byte sequence for encoding \"UTF8\": 0xe3 0x83 0x22", pg_code: "22021", routine: "report_invalid_encoding", severity: "ERROR"} 
    (pipeline_processor) lib/worker.ex:133: PipelineProcessor.Worker.recursive_db_insert/1 
    (pipeline_processor) lib/worker.ex:47: PipelineProcessor.Worker.process_article/1 
    (pipeline_processor) lib/worker.ex:17: PipelineProcessor.Worker.request_article/0 

Я знаю, что ошибка на самом деле из-за доступа к недопустимому свойству карты. Однако я пытаюсь решить проблему, которую предоставляет postgrex.

Мой postgrex Код вставки:

sql_string = "INSERT INTO articles (title, source, content) VALUES ($1, $2, $3) RETURNING id" 
{:ok, pid} = Postgrex.Connection.start_link(Application.get_env(:pipeline_processor, :db_details)) 
response = Postgrex.Connection.query(
    pid, 
    sql_string, 
    [article.title, article.source, article.content] 
) 

Postgrex.Connection.stop(pid) 

Есть в любом случае в эликсира, чтобы вычистить недействительные байты так, что эти вставки могут быть успешными? Или каким-то образом иметь postgres справиться с этим?

Благодаря

ответ

1

Как вы уже догадались, Postgres жалуется, что вы вставляете недопустимое UTF8 в текстовом виде. Сначала я попытался бы исправить неправильные кодировки, если вы не можете сделать это, используя комбинацию String.codepoints/1 и String.valid_character?/1, чтобы либо скраб, либо избежать недопустимых байтов.

+0

Спасибо. Я сделаю это. – Reizar

Смежные вопросы