Elixir - Postgres:无效的字节序列用于编码\“UTF8 \

时间:2015-11-19 00:46:24

标签: postgresql elixir

我目前正在开发一个elixir项目,该项目从API解析XML并使用postgrex将数据插入到postgres中。

大多数插入工作正常,但对于奇数插入,我得到此错误。我见过很多其他人都面临这个错误,但我不确定如何在Elixir中解决它。

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)

Elixir中是否还有擦除无效字节以便这些插入成功?或者以某种方式让postgres处理它?<​​/ p>

由于

1 个答案:

答案 0 :(得分:1)

正如您已经猜到的那样,postgres抱怨您将无效的UTF8插入到文本类型中。我最初会尝试修复错误的编码,如果你不能这样做,你可以使用String.codepoints/1String.valid_character?/1的组合来擦除或转义无效字节。