您必须牢记的基本原则是您始终都能看到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