Erlang-iconv is a fork of the iconv in Jungerl. I pulled it out of jungerl because I only wanted iconv, not all the other stuff in jungerl and because the jungerl build system wasn't very helpful on anything but linux.
erlang-iconv has been built and tested on the following platforms:
- Linux
- FreeBSD
- OpenBSD
- OSX
It should also build on NetBSD and most other UNIX-like systems. I haven't bothered to try on windows yet.
Here's some sample usage converting some shift-jis text to utf-8:
1> iconv:start().
{ok,<0.53.0>}
2> X = <<83,97,109,112,108,101,58,32,142,132,32,130,205,32,131,67,32,131,147,32,131,79,32,131,71,32,130,197,32,130,183,13,10>>.
<<83,97,109,112,108,101,58,32,142,132,32,130,205,32,131,
67,32,131,147,32,131,79,32,131,71,32,130,197,32,...>>
3> io:format("~s~n", [X]).
Sample:
Í C O G Å ·
ok
4> io:format("~ts~n", [X]).
** exception exit: {badarg,[{io,format,
[<0.25.0>,"~ts~n",
[<<83,97,109,112,108,101,58,32,142,132,32,130,205,32,
131,67,32,131,147,...>>]]},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_exprs,6},
{shell,eval_loop,3}]}
in function io:o_request/3
5> {ok, CD} = iconv:open("utf-8", "shift-jis").
{ok,<<176,86,91,1,0,0,0,0>>}
6> {ok, Output} = iconv:conv(CD, X).
{ok,<<83,97,109,112,108,101,58,32,231,167,129,32,227,129,
175,32,227,130,164,32,227,131,179,32,227,130,176,
...>>}
7> io:format("~ts~n", [Output]).
Sample: 私 は イ ン グ エ で す
8> iconv:close(CD).
ok
As you can see, before we passed it through iconv it was an unprintable mess.
To install, use rake:
rake sudo rake install
If the compilation of the C part fails with errors about iconv, you have to specify the prefix where iconv is located, for example on FreeBSD:
rake iconv=/usr/local
And if you don't have iconv or it's development header installed (and iconv isn't part of your C libary) install it.