Erlang utf-8十六进制到十进制

时间:2013-05-27 22:23:18

标签: utf-8 erlang hex

我正在尝试将十六进制0x80 0x94(utf-8)转换为相应的十进制值2014

是否可以在Erlang中进行转换?

3 个答案:

答案 0 :(得分:3)

您无法转换它的原因很简单,它无效UTF-8

4> io:format("~.2B~n", [16#80]).
10000000
ok
5> io:format("~.2B~n", [16#94]).
10010100
ok

有关详细信息,请参阅this site上的说明(我向您展示二进制文件,以便您可以看到二进制模式)。但归结为80h UTF-8中的UTF-8是无效的起始值。

我认为你可能想要一个来自unicode:characters_to_list(<<"I am a valid utf8 binary">>, utf8). 二进制文件的unicode代码点,如下所示:

2014

顺便说一下,代码点0xDF 0x9Ethis字符,UTF-8编码为{{1}}。

答案 1 :(得分:1)

您可以使用二进制utf8转换。虽然看起来你的号码已经关闭了:

2> A = <<16#80, 16#94>>.
<<128,148>>
3> <<B/utf8>> = A.
** exception error: no match of right hand side value <<128,148>>

转换是双向的,所以这是我期望的开始:

5> <<2014/utf8>>.
<<223,158>>

答案 2 :(得分:0)

我对这个问题感到困惑。 (对不起)......

在erlang中,十六进制数字以16#为前缀,所以如果您有16#80或16#94,并且想要将其转换为十进制值,则可以使用integer_to_list(16#AF8,10)