这段时间在整理网游的教程,在给服务器写文档的时候,发现erlang的edoc在生成文档的时候,如果使用的是中文的注释的话,就会失败,出现类似下面的错误:
edoc: error in doclet 'edoc_doclet': {'EXIT',{no_translation,[{io,put_chars,[<0.31.0>,unicode,[[60,33,68,79,67,84,89|...],[45,47,47,87,51,67|...],[34],[],[62,10],[[[...]|...],[...]]]]},{edoc_lib,write_file,4},{edoc_doclet,source,9},{lists,foldl,3},{edoc_doclet,sources,5},{edoc_doclet,gen,6},{edoc_lib,run_plugin,5},{init,start_it,1}]}}.
{"init terminating in do_boot",error}
Crash dump was written to: erl_crash.dump
init terminating in do_boot (error)
在网上查了一下,发现也有人碰到这个问题,后来,在nabble论坛(该论坛有很多的erlang的问题及解决办法,补丁等)发现了解决办法:
1、获取erlang的源代码,ubuntu的话直接sudo apt-get install erlang-src
2、修改edoc的源代码:
修改edoc_lib:write_file/4的代码
file:open(File,[Write])
为
file:open(File,[Write,{encoding,utf8}])
修改edoc_tags:parse_tags/5的代码
text ->
parse_tags(Ts,How,Env,Where,[T | Ts1]);
为
text ->
Data = unicode:characters_to_list(list_to_binary(T#tag.data)),
T2 = T#tag{data = Data},
parse_tags(Ts, How, Env, Where, [T2 | Ts1]);
4、编译上述两个文件,然后覆盖掉原来的文件。这样就可以使用中文注释了。我一直用的是utf-8的编码,对于其他编码没有使用过