`
langzhe
  • 浏览: 286883 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang 解决edoc生成中文乱码

阅读更多

昨天突然想edoc一下,英文顺利通过。与到中文就出出问题了。首先抛出的是{'EXIT',{no_translation,[{io,put_chars.....。

搜了一下发现erlang对中文支持不好(litaocheng,Qoom都说过)。但都没有说怎么解决(还是我没搜到?)。最后发现http://erlang.2086793.n4.nabble.com/UTF8-and-EDoc-td2088002.html#a2088002有解决方法。但我打“不”开,幸好是曾军看了好告诉我的。主要是修改两个源码,重新编译。

以下是原文章的解决方案

 

This is my fix to make EDoc work with Japanese (R13B02-1, .erl and
overview.edoc files are saved in UTF-8). I think it will work for
other languages:

1. At edoc_lib:write_file/4

Change

file:open(File)

to

file:open(File, [write, {encoding, utf8}])

This is better than my previous dirty hack.

2. At edoc_tags:parse_tags/5

Change

case dict:fetch(Name, How) of
    text ->
        parse_tags(Ts, How, Env, Where, [T | Ts1]);

to

case dict:fetch(Name, How) of
    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]);

Regards,
Ngoc

 按照上面的操作编译顺利通过(以前是用sudo apt-get install erlang 安装,需要remove掉重新来,花了不少时间),接下来打开网页,发现是乱码。仔细比较发现edoc生成的html默认没有 <meta>标签。

<meta



 http-equiv



="Content-Type" 



content



="text/html;charset=utf-8" 



/







>

我试着手工天加上后就没有乱码了。但不能每次都手工天加上,脑海中突然有个想法--修改源码重新编译(已经晚上7点多了)。API我也没有看(看英文有点费劲,还是要多学学英文的),直接看代码。在/edoc/priv中有edoc.dtd,edoc_generatev两个文件,这个文件的作用,我没有看明白请明白的人指点。

我原本想在生成head时候插入 meta标签,但没有这么简单(模板没有找到)。

通过函数追踪 我总是在edoc_lib:write_file/4和edoc:read/2中徘徊。中间我没有找到插入meta标签的入口(可能我看的不够仔细),最后决定在write_file写之前,插入meta标签。对write_file写之前的list作了分析,用了一个比较笨的方法:

在edoc_liber:write_file(Text, Dir, Name, Package)中把
io:put_chars(FD, Text)改为, 
io:put_chars(FD, get_meta(Text)),
get_meta(L)->

[H|T]=L,
[H1|T1]=T,
[H2|T2]=T1,
[H3|T3]=T2,
[H4|T4]=T3,
[H5|T5]=T4,

[H6|T6]=H5,
[H7|T7]=H6,

[H8|T8]=T7,

[H9|T9]=H8,

[H10|T10]=T9,

[H11|T11]=H10,

[H12|T12]=T11,

[H13|T13]=H12,
ME=[["<","meta http-equiv='Content-Type' content='text/html; charset=utf-8' ",">"],[],["</","meta",">"]],
NH13=[H13 | ME],



NH12=[NH13|T13],

NT11=[NH12|T12],

NH10=[H11|NT11],

NT9=[NH10|T10],

NH8=[H9|NT9],

NT7=[NH8|T8],

NH6=[H7|NT7],
NH5=[NH6|T6],

NT4=[NH5|T5],
NT3=[H4|NT4],
NT2=[H3|NT3],
NT1=[H2|NT2],
NT =[H1|NT1],
NL =[H|NT],
NL.

在此感谢曾{(++)}军的帮助

 疑问:

1、/edoc/priv中有edoc.dtd,edoc_generatev两个文件的作用。

2、插入meta期待更好的解决办法。


分享到:
评论

相关推荐

    erlang-edoc-19.3.6.4-1.el7.x86_64.rpm

    erlang-edoc-19.3.6.4-1.el7.x86_64.rpm

    erlang 中文乱码

    要解决Erlang中的中文乱码问题,你需要确保以下几个方面都正确无误: 1. **文件编码**:确认你要处理的文件是以正确的编码(如UTF-8)保存的。可以使用诸如Notepad++之类的文本编辑器检查和转换文件编码。 2. **...

    Erlang编写的生成一注双色球小程序

    **Erlang编程语言在生成双色球小程序中的应用** Erlang是一种功能强大的并行、分布式计算语言,尤其在处理高并发、容错性系统方面表现出色。在这个双色球小程序中,Erlang的独特特性和内置函数(BIFs,Built-in ...

    erlang test 生成 dets

    标题中的“erlang test 生成 dets”表明我们要讨论的是使用Erlang编程语言进行测试,并生成DETS(Disk-based Erlang Terms Storage)文件的过程。DETS是Erlang提供的一种持久化数据存储机制,类似于关系数据库的表,...

    高性能集群服务器Erlang解决方案

    ### 高性能集群服务器Erlang解决方案 #### Erlang简介及其特性 Erlang是一种专为构建高并发、高可用性和容错性系统而设计的编程语言与运行环境。其核心优势在于支持大规模并发处理能力,并能够实现分布式计算。...

    lambdapad, 使用Erlang的static 站点生成器 是的,Erlang.zip

    lambdapad, 使用Erlang的static 站点生成器 是的,Erlang LambdaPad Erlang power站点生成,仓库 !查看Lambda在 lambdapad.io 生成文档。 这是递归 !

    Erlang程序设计中文版

    通过阅读《Erlang程序设计中文版》并结合提供的完整书签,学习者可以逐步构建起对Erlang语言的全面理解,从而在实际工作中有效地运用Erlang解决复杂的问题。无论你是初学者还是有经验的开发者,这本书都能为你提供...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...

    erlang英文手册+中文教程

    `erlanghandbook.doc` 和 `Erlang+.doc` 文件很可能是Erlang的详细参考手册和中文学习教程。手册通常包含语言的语法、标准库函数、并发编程指南等内容。中文教程则为初学者提供了易懂的学习材料,帮助理解Erlang的...

    sublimeText3021安装包_注册机_汉化包_解决中文乱码

    4. **解决中文乱码问题**:Sublime Text默认可能无法正确显示中文字符,导致乱码。为了解决这个问题,用户需要设置正确的编码格式。在Sublime Text中,可以在“视图”菜单下选择“编码”,然后选择“简体中文 - GB...

    用matlab产生 erlang分布的随机数,两种方法

    在MATLAB中,我们可以利用不同的函数或技巧来生成服从Erlang分布的随机数。以下是两种常用的方法: **方法一:`gammavariate`函数** MATLAB中的`gammavariate`函数实际上是调用了C语言库的实现,可以生成伽马分布...

    Erlang编程规则——中文翻译版本

    本文将对Erlang编程规则的中文翻译版本中的部分内容进行详细解析,包括Erlang术语、SW工程原则、程序、服务器和消息处理、Erlang特殊约定、常见错误以及所需文档约定等。 Erlang术语部分提到了Erlang程序的模块化...

    erlang25.0 windows版本

    6. **编译器升级**:Erlang的BEAM虚拟机和编译器可能会有优化,使得编译速度更快,生成的代码更高效。 作为“源码软件”,Erlang 25.0同样提供了源代码,开发者可以深入研究其内部工作原理,进行定制化开发,或者为...

    erlang程序设计中文版

    主流编程语言如C/C++等都在探索并行计算的解决方案,而Erlang从诞生之初就是为了并发而设计的,这使得它能够更好地适应计算环境变革的趋势。 此外,本书还包含了一些关于版权和知识产权保护的信息。电子书的读者...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...

    erlang_版本24.3.4.4

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、分布式和实时系统。版本24.3.4.4是Erlang的一个更新版本,包含了对先前版本的改进和修复。Erlang以其强大的错误...

    erlang中文基础教程

    "Erlang中文基础教程" Erlang 编程语言是一种功能强大且灵活的编程语言,它提供了一个交互式的 shell 环境,允许用户在其中编写和运行代码。 Erlang Shell 是一个命令行交互环境,类似于 UNIX 和 LINUX 系统的...

    xiandiao_erlang_Erlang课后习题_

    6. **性能优化**:通过解决实际问题,学习者可以学习到如何有效地利用Erlang的特性进行性能优化,比如避免全局状态,利用并行计算等。 综上所述,"xiandiao"文件夹中的源码是学习Erlang编程和理解其并发特性的宝贵...

Global site tag (gtag.js) - Google Analytics