erlang的漢字字符串和二進制的相互轉換,並還原成漢字打印

 測試:

1> Hanzi = <<”漢字”/utf8>>.
<<230,177,137,229,173,151>>
2> io:format(“~ts”,[Hanzi]).
漢字ok
3> io:format(“~w”,[Hanzi]).
<<230,177,137,229,173,151>>ok
22> unicode:characters_to_binary(“中國”).
<<228,184,173,229,155,189>>

結論:

中文字符,在Erlang的存儲方式,可以是List,也可以是Binary。

如果以List方式存儲,即將中文字符,轉爲Unicode編碼(長整數格式);

如果以Binary方式存儲,即將中文字符,轉爲UTF-8編碼。

至於Unicode與UTF-8的區別,簡單來說,Unicode是一個碼錶,UTF-8是Unicode編碼的一種表示方法。具體的區別,大家可問下谷歌或度娘。

例子:

start() ->
Str = “中國”,
io:format(“Unicode list is: ~p~n”, [Str]),
Bin = unicode:characters_to_binary(Str),
io:format(“Unicode binary is: ~p~n”, [Bin]),
Str1 = unicode:characters_to_list(Bin, utf8),
io:format(“utf8 binary to list is: ~p~n”, [Str1]).

輸出結果:

Eshell V6.4 (abort with ^G)
([email protected])1> Unicode list is: [20013,22269]
([email protected])1> Unicode binary is: <<228,184,173,229,155,189>>
([email protected])1> utf8 binary to list is: [20013,22269]
([email protected])1>

其中用到了unicode庫函數,如果使用普通的erlang:list_to_binary或erlang:binary_to_list,會有編碼問題。

在開發過程中,使用的一些第三方庫,對中文支持或多或少都有些問題,各位按照此規則調試,可以解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章