如何使用Elixir将拉丁语-1转换为UTF-8?

如何使用Elixir将拉丁语-1转换为UTF-8?,utf-8,character-encoding,elixir,Utf 8,Character Encoding,Elixir,长生不老药1.3.0 视窗10 Postgrex 0.11.2 外星2.0.1 博士后9.4.4 我正试图通过Ecto向PostgreSQL数据库添加记录。当我访问包含\x0087的字符串时,它抛出以下错误: ** (Postgrex.Error) ERROR (character_not_in_repertoire): invalid byte sequence for encoding "UTF8": 0x87 我很确定这是文件本身的问题,据我所知,它被编码为拉丁文1。这是我用来打开文件并

长生不老药1.3.0

视窗10

Postgrex 0.11.2

外星2.0.1

博士后9.4.4

我正试图通过Ecto向PostgreSQL数据库添加记录。当我访问包含\x0087的字符串时,它抛出以下错误:

** (Postgrex.Error) ERROR (character_not_in_repertoire): invalid byte sequence for encoding "UTF8": 0x87
我很确定这是文件本身的问题,据我所知,它被编码为拉丁文1。这是我用来打开文件并将其读入的代码:

:ok = :io.setopts(:standard_io, encoding: :latin1)
File.open!(file)
|> IO.binstream(:line)
该文件可以很好地打开,事实上,在到达包含\x0087的一行之前,有几行都可以很好地处理

我不太清楚的是如何将用拉丁1编码读入的行转换为UTF-8编码。我找到了String.normalize,它看起来可能有助于转换,但我知道我在抓救命稻草

我将:
io.setopts
行上的
encoding:
参数更改为
:utf8
,但似乎没有什么区别


是否有一些简单的方法可以将ANSI/Latin1编码的字符串转换为UTF-8编码的字符串?

我真的不太愿意回答我自己的问题,但我认为使用中的技术也是正确的答案。基本上需要从CP-1252转换到UTF-8,然后一切都按预期工作。

我认为字节0x87在拉丁语1中无效:可能不正确。该文件实际上不是拉丁文1。实际上是Windows-1252。