2013-05-27 99 views

回答

3

你不能將它之所以只是它不是有效的UTF-8

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

詳見上this site的說明(我顯示你的二進制文件,所以你可以看到二進制模式)。但歸結起來,80hUTF-8中的一個無效起始值。

我想你可能想要的東西從UTF-8二進制一個Unicode碼點,像這樣:

unicode:characters_to_list(<<"I am a valid utf8 binary">>, utf8). 

順便說一句代碼點2014this字符是在UTF-8編碼0xDF 0x9E

0

我對這個問題有點混淆。 (對不起)... ...

在erlang十六進制數字的前綴是16#所以如果你有16#80或16#94數字,你想將它轉換爲十進制值,你可以使用integer_to_list(16#AF8 ,10)

+0

很抱歉,這個問題的提法很晚,很晚。那麼,我知道基數的16次轉換。但問題是這不是16位。所以FX。當我做integer_to_list(16#8094,10)。它返回32916.雖然我正在尋找的價值是2014. –

+0

你如何得到2014?給定十六進制的十進制值應該是128和148.嘗試K =「\ x80 \ x94」。 –

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>>