您必須牢記的基本原則是您始終都能看到Unicode。 Unicode是一串數字,沒有任何特別的指令,shell就會告訴你:數字串。
可以使用io:format/2
從
io:format("Print a term: ~p~n", [Term])
更改爲
io:format("Print a Unicode term: ~tp~n", [UnicodeTerm])
有一些基本的編碼顯示的Unicode你希望(如果你的終端可以打印的字符,這是)的方式將Unicode文件作爲數據處理時可能會有用的東西(雖然我不確定file:consult/1
是否獲得了Erlang條款)。這裏是一個樁模塊,你可以建立在做FILE_READ和FILE_WRITE:
%% Beginnings of a utf8 file I/O module
%% -*- coding: utf8 -*-
-module(u_file).
-export([write_file/2, read_file/1]).
write_file(Filename, UTF8_data) ->
file:write_file(Filename, unicode:characters_to_binary(UTF8_data, utf8)).
read_file(Filename) ->
case file:read_file(Filename) of
{ok, Data} -> {ok, unicode:characters_to_list(Data, utf8)};
Other -> Other
end.
我不知道你需要從你的ETS表,看看有什麼,但如果它只是檢查值在外殼那麼你只需需要從〜p項替換切換到〜tp unicode項替換。實際上,在任何地方使用〜tp並不是一個壞主意,因爲它的工作方式與其他數據完全相同(ASCII是UTF-8的子集很方便!)。
希望這能讓您更接近解決方案。無論如何,我堅決建議每個厄蘭格爾閱讀文檔的「Using Unicode in Erlang」部分。
嗨,非常感謝你回答我的問題。我正在使用OTP 17.0。我真的應該澄清我的問題,我嘗試通過shell創建一個ETS包,然後嘗試插入有趣的字符,然後插入eta:lookup,看看我能否回讀。 當我看結果時,它被保存爲一個整數列表,因此當我查找它時,結果也是一個整數列表。 這是正常的嗎? – xcoder 2014-11-01 18:50:11
我也編輯過這個問題。 Thx再次。 – xcoder 2014-11-01 18:56:45
是的,整數列表是正確的。 zxq9的答案顯示瞭如何爲調試/日誌打印字符串,但整數列表是每個Erlang字符串實際表示的方式。考慮這一行的結果:'「hello」++ [32,119,111,114,108,100]。(++是append-lists運算符) – 2014-11-02 17:11:06