转换 UTF-8 iso-8859 字节 - String.to_charlist

博通的

我遇到了一个奇怪的问题。我有一个程序从外部源接收以字节为单位的数据,作为回报,我执行一些业务逻辑并发送回复。我们遇到了一个关于 String.to_charlist 的奇怪问题。

在 iex 中试试这个:

String.to_charlist <<169, 99, 111, 114, 94, 51, 94, 51, 94, 66, 52, 57, 49, 49, 49, 32, 32, 49, 48, 51, 53, 94, 67, 79, 77, 80, 76, 69, 84, 69, 68, 94, 49, 49, 52, 50, 52, 53, 94, 75>>

这将引发以下错误:

** (UnicodeConversionError) invalid encoding starting at <<169, 99, 111, 114, 94, 51, 94, 51, 94, 66, 52, 57, 49, 49, 49, 32, 32, 49, 48, 51, 53, 94, 67, 79, 77, 80, 76, 69, 84, 69, 68, 94, 49, 49, 52, 50, 52, 53, 94, 75>>
    (elixir) lib/string.ex:2035: String.to_charlist/1

现在,如果您去掉第一个字节并依次尝试:

String.to_charlist <<99, 111, 114, 94, 51, 94, 51, 94, 66, 52, 57, 49, 49, 49, 32, 32, 49, 48, 51, 53, 94, 67, 79, 77, 80, 76, 69, 84, 69, 68, 94, 49, 49, 52, 50, 52, 53, 94, 75>>

你得到:

'cor^3^3^B49111 1035^COMPLETED^114245^K'

有没有不同的方式我应该将这些字节转换为字符串?我知道一些像 169 这样的字符可能无法显示,但是推荐的处理方式是什么?

谢谢你的帮助。

我确实找到了这个:

<<169 :: utf8, 0>> 

返回 <<194, 169, 0>> 其中添加了 194。因此,如果将其粘贴到 iex 中,输出似乎是正确的。

<<194, 169, 99, 111, 114, 94, 51, 94, 51, 94, 66, 52, 57, 49, 49, 49, 32, 32, 49, 48, 51, 53, 94, 67, 79, 77, 80, 76, 69, 84, 69, 68, 94, 49, 49, 52, 50, 52, 53, 94, 75>> 

我是否需要编写一个函数来遍历字节并调用 <> 然后减少返回的字节(0 concat 除外)?

阿列克谢·马蒂乌什金

String.to_charlist/1 首先是多余的:

String.to_charlist <<99, 111, 114, 94, 51, 94, 51, 94>>

之所以有效,只是因为utf8latin1在 interval 中共享相同的代码点1–127以下内容足以获得完全有效的二进制文件:

<<99, 111, 114, 94, 51, 94, 51, 94>>
#⇒ "cor^3^3^"

不幸的是,您收到的不是utf8编码,Elixir 没有内置工具来在编码之间转换二进制文件。您不能只删除有意义的符号。

我建议使用codepagexpackage 进行该转换:

Codepagex.from_string(<<99, 111, 114, 94, 51, 94, 51, 94>>, :iso_8859_1)
#⇒ "cor^3^3^"

另一种方法是使用 erlang 的unicode.characters_to_binary/2

:unicode.characters_to_binary(
  <<169, 99, 111, 114, 94, 51, 94, 51, 94>>, :latin1, :utf8
)
#⇒ "©cor^3^3^"

使用Kernel.SpecialForms.for/1理解的另一种解决方案

to_string(for <<c :: 8 <- <<169, 99, 111, 114, 94, 51, 94, 51, 94>> >>, do: c)
#⇒ "©cor^3^3^"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从UTF8转换为ISO 8859-5,改为获取ISO 8859-1

来自分类Dev

将iso-8859-1转换为utf-8 javascript

来自分类Dev

Javascript将字符串从utf-8转换为iso-8859-1

来自分类Dev

将SQL Server中的文本值从UTF8转换为ISO 8859-1

来自分类Dev

jQuery或Javascript:从ISO-8859-1转换为utf8

来自分类Dev

将UTF-8转换为ISO-8859-2(抛光)

来自分类Dev

在Delphi中将UTF8转换为ANSI(ISO-8859-1)

来自分类Dev

从ISO-8859-1转换大型XML为UTF-8与外部DTD实体

来自分类Dev

将(txt | srt)文档从Western(ISO-8859-15)转换为UTF-8

来自分类Dev

将ISO-8859-1转换为utf-8(øæå)

来自分类Dev

DB是iso-8859-1,使用utf8_encode字符获取错误的转换

来自分类Dev

从 Linux 终端将 ISO-8859-7 转换为 utf-8 而无需 bom

来自分类Dev

如何将 iso8859_6 中的文件名转换为 utf-8?

来自分类Dev

从 UTF8 转换为 ISO-8859-1 不起作用

来自分类Dev

从UTF-8转换为ISO8859-1并重新转换为UTF-8后,符号会丢失

来自分类Dev

如何在Ruby 2.0中将UTF-8转换为ISO-8859-1?

来自分类Dev

将字符从ISO-8859-1转换为Javascript中的UTF-8编码时,保持字符表示

来自分类Dev

使用Dart语言将字符串从ISO-8859-2转换为UTF-8

来自分类Dev

使用Dart语言将字符串从ISO-8859-2转换为UTF-8

来自分类Dev

Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

来自分类Dev

从utf8转换为iso-8859-1后未显示丹麦语字符

来自分类Dev

如何在C ++中将ISO-8859-7字符串“转换”为UTF-8?

来自分类Dev

Ruby将字符串编码从ISO-8859-1转换为UTF-8无效

来自分类Dev

从UTF-8转换为ISO-8859-15时,哪些双引号字符会自动替换?

来自分类Dev

字符编码问题-UTF8 / iso-8859-1

来自分类Dev

UTF-8和ISO 8859-9

来自分类Dev

默认编码的字节数组转换为ISO-8859-1编码的字节数组

来自分类Dev

从ISO-8859-2转换为ORACLE字符集AL16UTF16

来自分类Dev

在ISO-8859-1中重新编码utf8..cp1250结果

Related 相关文章

  1. 1

    从UTF8转换为ISO 8859-5,改为获取ISO 8859-1

  2. 2

    将iso-8859-1转换为utf-8 javascript

  3. 3

    Javascript将字符串从utf-8转换为iso-8859-1

  4. 4

    将SQL Server中的文本值从UTF8转换为ISO 8859-1

  5. 5

    jQuery或Javascript:从ISO-8859-1转换为utf8

  6. 6

    将UTF-8转换为ISO-8859-2(抛光)

  7. 7

    在Delphi中将UTF8转换为ANSI(ISO-8859-1)

  8. 8

    从ISO-8859-1转换大型XML为UTF-8与外部DTD实体

  9. 9

    将(txt | srt)文档从Western(ISO-8859-15)转换为UTF-8

  10. 10

    将ISO-8859-1转换为utf-8(øæå)

  11. 11

    DB是iso-8859-1,使用utf8_encode字符获取错误的转换

  12. 12

    从 Linux 终端将 ISO-8859-7 转换为 utf-8 而无需 bom

  13. 13

    如何将 iso8859_6 中的文件名转换为 utf-8?

  14. 14

    从 UTF8 转换为 ISO-8859-1 不起作用

  15. 15

    从UTF-8转换为ISO8859-1并重新转换为UTF-8后,符号会丢失

  16. 16

    如何在Ruby 2.0中将UTF-8转换为ISO-8859-1?

  17. 17

    将字符从ISO-8859-1转换为Javascript中的UTF-8编码时,保持字符表示

  18. 18

    使用Dart语言将字符串从ISO-8859-2转换为UTF-8

  19. 19

    使用Dart语言将字符串从ISO-8859-2转换为UTF-8

  20. 20

    Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

  21. 21

    从utf8转换为iso-8859-1后未显示丹麦语字符

  22. 22

    如何在C ++中将ISO-8859-7字符串“转换”为UTF-8?

  23. 23

    Ruby将字符串编码从ISO-8859-1转换为UTF-8无效

  24. 24

    从UTF-8转换为ISO-8859-15时,哪些双引号字符会自动替换?

  25. 25

    字符编码问题-UTF8 / iso-8859-1

  26. 26

    UTF-8和ISO 8859-9

  27. 27

    默认编码的字节数组转换为ISO-8859-1编码的字节数组

  28. 28

    从ISO-8859-2转换为ORACLE字符集AL16UTF16

  29. 29

    在ISO-8859-1中重新编码utf8..cp1250结果

热门标签

归档