Erlang-China

erlang 中文社区

【转】Erlang 字符编码模块: iconv


原文地址:avindev.javaeye.com
原文作者:AvinDev

在Erlang中,要处理字符串编码的转换,可以使用iconv,目前CEAN的发行版本,ejabberd和iconv模块里面都有iconv的库,但是都无法正常运行(提示版本不兼容),但是在ejabberd的安装包可以使用。经过比较,发现是 erl.exe,erlexec.dll,beam.dll 这三个启动程序的问题,ejabberd 的是 V5.5.2.2,而 CEAN1.2 和ErlangOTP R11B4 都是 V5.5.4,可能两个版本跟iconv的c port不兼容。

下面就以ejabberd的erlang版本来说明:

首先启动port

  1. 1> iconv:start().
  2. {ok,<0.30.0>}
  3. 2> iconv:convert("gbk", "utf-8", "你好")
  4. "浣犲ソ"

Windows下控制台编码为gbk,这里将“你好”编码为UTF8后输出,显示乱码,可以用io:format解决:

  1. 3> io:format("~w~n", [iconv:convert("gbk", "utf-8", "你好")]).
  2. [228,189,160,229,165,189]
  3. ok

反过来流程是一样的:

  1. 4> iconv:convert("utf-8", "gbk", [228,189,160,229,165,189]).
  2. "你好"

要解决在Erlang发行版下使用的问题,估计要重新编译iconv的port。有谁有更好的方法,欢迎提出。

注:貌似 N 多的 c port 代码在 cean 版本中都有问题,上次试验 linux 下的 cean yaws 也出了一个 ddll 的包不兼容的问题。而自己从源代码编译 erlang 又巨慢巨痛苦。苦恼啊。







Write a Comment

Note: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>