下载了新版的Erlang/OTP R13B,重点试了试新增的unicode支持和wxErlang。
不象一些中文介绍说的那样乐观,我的测试结果不太好。
unicode的支持,只解决了eshell里的问题,即在erl和werl这两个工具中,已经能够正确解码,io:format已经支持多字节编码。
编译器erlc仍然不支持多字节unicode,用户程序编译后,无法简便地显示多字节unicode。
测试结果如下:
一、eshell的表现
Eshell V5.7.1 (abort with ^G)
1> unicode:characters_to_list("中文窗口").
[20013,25991,31383,21475]
2>
2> S = unicode:characters_to_list("中文窗口").
[20013,25991,31383,21475]
3>
3> io:format("~ts~n",[S]).
中文窗口
ok
[20013,25991,31383,21475]ok
5>
二、erlc编译程序的表现
先看个简单的。
%% chinese.erl
-module(chinese).-export([start/0]).
start() ->
Title=unicode:characters_to_list("中文窗口"),
io:write(Title),
io:format("~n~n~s~n~n",[Title]),
1> c(chinese).
2> chinese:start().
[214,208,206,196,180,176,191,218]
中文窗口
这里,虽然显示出了“中文窗口”四个字,但没有正确解码成多字节编码[20013,25991,31383,21475],当使用GUI界面时,中文还是显示成乱码。
三、在wxErlang中的表现
将erl5.7.1/lib/wx-0.98.1/examples/simple/hello.erl稍作改动:
create_window(Wx) ->
Title=unicode:characters_to_list("中文窗口"),
io:write(Title),
io:format("~n~n~s~n~n",[Title]),
T=[20013,25991,31383,21475],
Frame = wxFrame:new(Wx,
-1, % window id
T, % window title
[{size, {600,400}}]),
……
在eshell中显示的是:
[214,208,206,196,180,176,191,218]
ÖÐÎÄ´°¿Ú
而在程序窗口的标题上,将unicode [20013,25991,31383,21475] 正确显示为“中文窗口”。
总之,在eshell中,可用unicode:characters_to_list("中文窗口"),解析成[20013,25991,31383,21475],这是GUI显示时所需要的。
但是,程序经erlc编译后,将其解析成[214,208,206,196,180,176,191,218],无法正确显示。
Erlang的程序编译器erlc需要改进,以全面支持unicode。