Elixir 1.3.0
Windows 10
Postgrex 0.11.2
Ecto 2.0.1
Postgres 9.4.4
我试图通过Ecto将记录添加到PostgreSQL数据库。当我到达包含\ x0087的字符串时,它会抛出以下错误:
** (Postgrex.Error) ERROR (character_not_in_repertoire): invalid byte sequence for encoding "UTF8": 0x87
我很确定这是文件本身的一个问题,据我所知,它被编码为Latin1。这是我用来打开文件并在其中读取的代码:
:ok = :io.setopts(:standard_io, encoding: :latin1)
File.open!(file)
|> IO.binstream(:line)
该文件打开正常,实际上几行处理得很好,直到它到达包含\ x0087的行。
我能够理解的是如何将使用latin1编码读入的行转换为UTF-8编码。我发现String.normalize似乎可能有助于转换,但我知道我正在抓住稻草。
我将encoding:
行的io.setopts
参数更改为:utf8
,但似乎无法发挥作用。
是否有一些简单的方法将ANSI / Latin1编码的字符串转换为UTF-8编码的字符串?