【背景】

已经实现用docbook生成单个和多个HTML了。

但是希望输出的文件是一个完全单个文件,而之前的输出的单个的HTML文件,其图片文件是另外的,不是包含在HTML文件里面的。

所以,就去找这些的东西。

【解决过程】

1.本来是以为完全单个的HTML是xhtml的。

后来发现搞错了,完全单个的HTML是mht类型文件。

2.后来又看到了docbook输出支持htmlhelp文件,即html类型的帮助文件,所以又去折腾用docbook输出为htmlhelp文件。<?xml version='1.0'?>

/p>

[

]

>

version='1.0'>

encoding="UTF-8"

indent="no"/>

用命令生成htmlhelp:CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src

$ XML_CATALOG_FILES="/home/CLi/develop/docbook/config/catalog/catalog.xml" \

> XML_DEBUG_CATALOG=1 \

> xsltproc.exe --xinclude -o ../output/htmlhelp/MPEG_VBR.html docbook_htmlhelp_crl.xsl MPEG_VBR.xml

Resolve: sysID docbook_htmlhelp_crl.xsl

-2147483592 Parsing catalog /home/CLi/develop/docbook/config/catalog/catalog.xml

/home/CLi/develop/docbook/config/catalog/catalog.xml added to file hash

Resolve URI docbook_htmlhelp_crl.xsl

Found URI match docbook_htmlhelp_crl.xsl

Resolve: pubID crl.ent sysID null

Found public match crl.ent

Writing pr01s02.html for section

Writing pr01.html for preface(preface)

Writing ch01s02.html for sect1

Writing ch01s03.html for sect1

Writing ch01s04.html for sect1

Writing ch01s05.html for sect1

Writing ch01.html for chapter(ch01_mpeg_related)

Writing ch02s02.html for sect1

Writing ch02s03.html for sect1

Writing ch02s04.html for sect1

Writing ch02s05.html for sect1

Writing ch02s06.html for sect1

Writing ch02s07.html for sect1

Writing ch02s08.html for sect1

Writing ch02.html for chapter(ch02_mp3_term.xml)

Writing ch03s02.html for sect1

Writing ch03s03.html for sect1

Writing ch03.html for chapter(ch03_mpeg_frame.xml)

Writing ch04s02.html for sect1

Writing ch04.html for chapter(ch04_xing_vbri.xml)

Writing ch05s02.html for sect1

Writing ch05s03.html for sect1

Writing ch05.html for chapter(ch05_calc_duration.xml)

Writing ch06s02.html for sect1

Writing ch06s03.html for sect1

Writing ch06s04.html for sect1

Writing ch06.html for chapter(ch06_mp3_related.xml)

Writing ch07.html for chapter(ch07_after_content.xml)

Writing bi01.html for bibliography(reference)

Writing index.html for book

Writing htmlhelp.hhp

Writing toc.hhc

Catalogs cleanup

Free catalog entry crl.ent

Free catalog entry /home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1/

Free catalog entry docbook_html.xsl

Free catalog entry docbook_fo.xsl

Free catalog entry /home/CLi/develop/docbook/config/docbook-xsl-ns-1.76.1/

Free catalog entry docbook_html_crl.xsl

Free catalog entry chunk_html_crl.xsl

Free catalog entry docbook_htmlhelp_crl.xsl

Free catalog entry docbook_fo_crl.xsl

Free catalog entry /home/CLi/develop/docbook/config/catalog/catalog.xml

Free catalog entry

2.结果去看生成的文件,是多个零散的文件,所以又按照上面的介绍,去找Microsoft’s HTML Help Workshop,然后找到下载的地方:

结果下载下来的exe被报病毒,所以算了,暂时放弃,等有空再折腾这个吧。

3.后来去将HTML Help Wordshop下载下来,安装,然后再把安装好的路径,加到系统的path环境变量中,这样cygwin和cmd中就都可以直接使用hhc了。

然后就可以去使用hhc了:Administrator@K470 /cygdrive/e/Dev_Root/docbook/dev/books/VBR/src

$ hhc ../output/htmlhelp/htmlhelp.hhp

Microsoft HTML Help Compiler 4.74.8702

Compiling e:\Dev_Root\docbook\dev\books\VBR\output\htmlhelp\htmlhelp.chm

index.html

pr01.html

pr01s02.html

ch01.html

ch01s02.html

ch01s03.html

ch01s04.html

ch01s05.html

ch02.html

ch02s02.html

ch02s03.html

ch02s04.html

ch02s05.html

ch02s06.html

ch02s07.html

ch02s08.html

ch03.html

ch03s02.html

ch03s03.html

ch04.html

ch04s02.html

ch05.html

ch05s02.html

ch05s03.html

ch06.html

ch06s02.html

ch06s03.html

ch06s04.html

ch07.html

bi01.html

toc.hhc

Compile time: 0 minutes, 0 seconds

60 Topics

364 Local links

16 Internet links

0 Graphics

Created e:\Dev_Root\docbook\dev\books\VBR\output\htmlhelp\htmlhelp.chm, 56,676 bytes

Compression decreased file by 161,663 bytes.

Administrator@K470 /cygdrive/e/Dev_Root/docbook/dev/books/VBR/src

然后去打开生成的htmlhelp.chm,效果还不错:

但是文件标题和左边的目录索引部分是乱码,所以要去解决此问题。

4.关于乱码问题,试了很多个参数

最后参考别人的帖子:

但是最后发现,都解决不了我的问题。

因为我此处生成的hhp文件htmlhelp.hhp本身内容:[OPTIONS]

Binary TOC=Yes

Compatibility=1.1 or later

Compiled file=MPEG_VBR.chm

Contents file=toc.hhc

Default Window=Main

Default topic=index.html

Display compile progress=Yes

Full-text search=Yes

Language=0x0804 Chinese (CHINA)

Title=MPEG简介 + 如何计算CBR和VBR的MP3的播放时间

Enhanced decompilation=No

[WINDOWS]

Main="MPEG简介 + 如何计算CBR和VBR的MP3的播放时间","toc.hhc",,"index.html","index.html",,,,,0x2520,,0x603006,,,,,,,,0

[FILES]

index.html

pr01.html

pr01s02.html

ch01.html

ch01s02.html

ch01s03.html

ch01s04.html

ch01s05.html

ch02.html

ch02s02.html

ch02s03.html

ch02s04.html

ch02s05.html

ch02s06.html

ch02s07.html

ch02s08.html

ch03.html

ch03s02.html

ch03s03.html

ch04.html

ch04s02.html

ch05.html

ch05s02.html

ch05s03.html

ch06.html

ch06s02.html

ch06s03.html

ch06s04.html

ch07.html

bi01.html

中,本身已经是中文的Lang,另外title和Main都是“乱码”,即不是中文,而是Unicode形式,所以生成的内容,包括TOC目录和chm标题,都是对应的“乱码”。

另外也去看了TOC文件toc.hhc,其内容也是类似的:

。。。。

所以,本身hhp和hhc,都是有问题的。

所以还是要继续去找到,为何xsltproc为何输出这种内容,而不是中文汉字,然后再用hhc处理,应该就可以了。

5.后来参考:

找到了那个转换为UTF8的工具:

将其内容:<?php

function toUtf8($ar)

{

foreach($ar as $val)

{

$val = intval(substr($val,2),16);

$c = '';

if($val < 0x7F)

{ // 0000-007F

$c .= chr($val);

}

elseif($val < 0x800)

{ // 0080-0800

$c .= chr(0xC0 | ($val / 64));

$c .= chr(0x80 | ($val % 64));

}

else

{ // 0800-FFFF

$c .= chr(0xE0 | (($val / 64) / 64));

$c .= chr(0x80 | (($val / 64) % 64));

$c .= chr(0x80 | ($val % 64));

}

}

return $c;

}

function uniDecode($str, $charcode="UTF-8")

{

$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", 'toUtf8', $str);

return mb_convert_encoding($text, $charcode, 'utf-8');

}

function cp($m)

{

return iconv('UTF-8', 'GBK', uniDecode('%u' . dechex($m[1])));

}

function c($str)

{

return preg_replace_callback('/([0-9]+);/', 'cp', $str);

}

if (isset($_GET['fileName']))

{

$fileName = $_GET['fileName'];

}

else if(isset($argv[1]))

{

$fileName = $argv[1];

}

else

{

echo "Usage: In the command line: php scriptName fileName or on the web http://foobar/scriptName.php?fileName=foobar";

}

if (isset($_GET['output']))

{

$output = $_GET['output'];

}

elseif(isset($argv[2]))

{

$output = $argv[2];

}

else

{

$p = pathinfo($fileName);

$output = $p['basename'];

}

$file = file_get_contents($fileName);

$file = c($file);

file_put_contents($output, $file);

echo 'Success: ' . date('Y-m-d H:i:s', time());

另存为utf8.php,然后又参考:

先把自己的原先的两个hhp和hhc文件:

htmlhelp.hhp和toc.hhc

放到本地web服务器根目录,然后访问:

就可以看到:

Success: 2012-05-09 17:08:30

Success: 2012-05-09 17:08:08

的字样,即生成了新的两个文件:

htmlhelp2.hhp和toc2.hhc

这两个文件,就是转换为UTF8编码之后的文件了。

效果如下:

htmlhelp2.hhp:[OPTIONS]

Binary TOC=Yes

Compatibility=1.1 or later

Compiled file=MPEG_VBR.chm

Contents file=toc.hhc

Default Window=Main

Default topic=index.html

Display compile progress=Yes

Full-text search=Yes

Language=0x0804 Chinese (CHINA)

Title=MPEG简介 + 如何计算CBR和VBR的MP3的播放时间

Enhanced decompilation=No

[WINDOWS]

Main="MPEG简介 + 如何计算CBR和VBR的MP3的播放时间","toc.hhc",,"index.html","index.html",,,,,0x2520,,0x603006,,,,,,,,0

[FILES]

。。。。。

toc2.hhc:

  • 。。。。

    然后将他们替换掉原先的两个“乱码”的htmlhelp.hhp和toc.hhc,再去重新生成对应的chm:hhc ../output/htmlhelp/htmlhelp.hhp

    最后就可以解决乱码问题了,生成的chm文件,左边的TOC索引目录和标题,都是可以正常显示中文了:

    【总结】

    想要生成htmllhelp不难,但是想要解决所生成的中文的chm中的标题,和左边的索引目录是乱码的问题,倒是比较麻烦。需要利用到别人写的将hhp和hhc转换为UTF8编码,然后重新生成的chm,才能解决乱码问题。

    有空,还是需要改进此办法,让其用起来更简单点。

    比如通过本地php执行对应转码工具

    ,实现对应功能。或者自己去写对应的python脚本或exe文件,实现对应转码功能。然后命令行中就可以用了。

    【后记】

    之前折腾过程中,就发现了,对于htmlhelp_crl.xsl中,不能在配置htmlhelp.title等参数的时候,设置中文汉字,否则会导致该xsl后续参数无法正确识别,也就导致后面参数实际没有生效。所以之前设置的一些参数,包括:

    都没有生效。

    现在无意间继续折腾的结果是,其实同时设置这两个参数,此时生成出来的htmlhelp.hhp和toc.hhc,都是可以正确显示中文的,但是却都是UTF-8(的无BOM)编码,此时用hhc执行的话,会出现:

    HHC5003: Error: Compilation failed while compiling toc.hhc".

    的错误。然后通过Notepad++,将两个文件转换为ANSI(即本地的中文)编码后,此时再去用:

    hhc ../output/htmlhelp/htmlhelp.hhp

    就可以正确输出chm文档了。然后所有的标题和索引目录,也都是正常的了。

    【总结2】

    目前对于解决:

    docbook生成的htmlhelp后,最终生成的chm中标题和索引目录是乱码

    的最简单的方法是:

    1 . 在xsl配置文件htmlhelp_crl.xsl中配置htmlhelp.encoding和chunker.output.encoding都为UTF-8:

    这样再用xsltproc处理:XML_CATALOG_FILES="/cygdrive/e/Dev_Root/docbook/dev/config/catalog/catalog.xml" \

    XML_DEBUG_CATALOG=1 \

    xsltproc.exe --xinclude -o ../output/htmlhelp/MPEG_VBR.html docbook_htmlhelp_crl.xsl MPEG_VBR.xml

    所生成的htmlhelp.hhp和toc.hhc就都是UTF-8的编码了,两个文件中的中文,也就都可以正确显示了。

    2. 但是由于hhc不能识别UTF-8,所以要通过Notepad++等工具,将htmlhelp.hhp和toc.hhc转换为ANSI编码

    3.然后再用hhc处理:hhc ../output/htmlhelp/htmlhelp.hhp

    此时输出的chm中,所有的中文,包括标题,索引目录等,就都可以正常显示了。

    【后记2】

    后来又添加了相关参数:

    使得生成的html中各个章节的编号都全部带编号,然后对应生成的chm中的索引部分,也就都带编号了,达到了最终想要的效果:

    【后记3】

    对于之前用Notepad++将两个文件,htmlhelp.hhp和toc.hhc,从原先的UTF-8转换为本地ANSI编码,对此,还是需要手动去一个个操作,很是不方便。所以,又去折腾了下,找到了Cygwin/Linux下面有没有对应的工具可以实现编码转换的,然后就找到了iconv这个工具。

    简单说,iconv,是个Linux/Cygwin下的命令行工具,可以实现对应的编码转换。详细解释可以去看:iconv 中文wiki

    其对应的库,是libiconv,Linux下安装其他软件的时候,往往也会需要此库的。

    iconv的用法,还是很简单的,假设当前文件是UTF-8编码的utf8.txt,想要将其转换为本地ANSI编码GB18030,对应命令为:$ iconv -f UTF-8 -t GB18030 utf8.txt > converted_gb18030.txt

    另外,多说几句:

    去用iconv -l去查看当前支持的哪些编码,可以看到很多我们所常见的编码:$ iconv -l

    ...

    UTF-8

    ...

    UTF-16

    UTF-16BE

    UTF-16LE

    UTF-32

    UTF-32BE

    UTF-32LE

    ...

    UCS-2-INTERNAL

    UCS-2-SWAPPED

    UCS-4-INTERNAL

    UCS-4-SWAPPED

    ...

    CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1

    ...

    CP1250 MS-EE WINDOWS-1250

    CP1251 MS-CYRL WINDOWS-1251

    CP1252 MS-ANSI WINDOWS-1252

    CP1253 MS-GREEK WINDOWS-1253

    ...

    GBK

    CP936 MS936 WINDOWS-936

    GB18030

    ...

    BIG-5 BIG-FIVE BIG5 BIGFIVE CN-BIG5 CSBIG5

    CP950

    ...

    【总结3】

    所以,现在可以用更简单的办法例如:

    1 . 在xsl配置文件htmlhelp_crl.xsl中配置htmlhelp.encoding和chunker.output.encoding都为UTF-8:

    这样再用xsltproc处理:XML_CATALOG_FILES="/cygdrive/e/Dev_Root/docbook/dev/config/catalog/catalog.xml" \

    XML_DEBUG_CATALOG=1 \

    xsltproc.exe --xinclude -o ../output/htmlhelp/MPEG_VBR.html docbook_htmlhelp_crl.xsl MPEG_VBR.xml

    所生成的htmlhelp.hhp和toc.hhc就都是UTF-8的编码了,两个文件中的中文,也就都可以正确显示了。

    2. 但是由于hhc不能识别UTF-8编码,所以要将htmlhelp.hhp和toc.hhc转换为本地ANSI的GB18030编码:iconv -f UTF-8 -t GB18030 < ../output/htmlhelp/htmlhelp.hhp > ../output/htmlhelp/htmlhelp_gb18030.hhp

    mv ../output/htmlhelp/htmlhelp_gb18030.hhp ../output/htmlhelp/htmlhelp.hhp

    iconv -f UTF-8 -t GB18030 < ../output/htmlhelp/toc.hhc > ../output/htmlhelp/toc_gb18030.hhc

    mv ../output/htmlhelp/toc_gb18030.hhc ../output/htmlhelp/toc.hhc

    3.然后再用hhc处理:hhc ../output/htmlhelp/htmlhelp.hhp

    此时输出的chm中,所有的中文,包括标题,索引目录等,就都可以正常显示了。

html转换成chm乱码,【全部解决】用Docbook生成htmlhelp + 【完全解决】生成的chm中标题和左边的索引目录是乱码的问题...相关推荐

  1. PDF怎么转换成jpg图片保存?简单几步就能解决。

    在我们的日常工作和生活中,我们经常会和别人在线传输各种文件.但是在传输Word文档.Excel表格.PPT等格式的文件时,文件内容排版和布局容易出现变化.因此,人们在传输文件时一般都将文件转换为PDF ...

  2. 图片文字怎么转换成Word文档?教你两招快速解决

    图片中的文字怎么把它转换成Word文档呢?大家在办公的过程中肯定有使用图片的时候,因为图片可以快速将重要的内容记录下来,至于后面的整理图片的时候,很多小伙伴就不想动了,因为需要将图片中的文字用键盘打出 ...

  3. html转换成canvas一片空白,html2canvas截图空白问题怎么解决 html2canvas截图空白问题解决方法...

    本篇文章小编给大家分享一下html2canvas截图空白问题解决方法,通过代码图文详细分析了问题及解决方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 项目使用的reac ...

  4. android xml转换成svg,如何将Android xml布局转换为png / svg以在iOS版本中使用

    我这里有一个 Android布局xml文件: android:id="@+id/locationMarker" android:layout_width="wrap_co ...

  5. truetype字体怎么转换成普通字体_社交资料不再普通 Instagram Fonts在线生成可复制字体...

    推荐一个在线特殊文字&字体生成网站,很多人经常在QQ网名.微信名称.个性签名档看到一些奇奇怪怪漂亮的字体(有点非主流~),那么这些字体就叫Instagram字体. 将想要生成的文字黏贴到输入框 ...

  6. csv文件转换成html文件格式,将CSV转换为HTML表格格式并存储在HTML文件中

    这可能会帮助您: import sys import csv if len(sys.argv) < 3: print "Usage: csvToTable.py csv_file ht ...

  7. cad转换成jpg不清楚,教你如何解决

    平时我是经常要用到图纸转换成图片的操作,我们平时在进行图纸的设计和编辑中,有很多时候也要取高清的图片进行使用,比如说放在WOLD文档中.那么如何进行操作呢? 好的方法其实是很简单的,我们只需要利用ca ...

  8. 【转载】vob格式转换成avi格式的影片和制作的方法

    vob格式转换成avi格式的影片和制作的方法: 打开DVD根目录,你可看到两个子目录:VIDEO_TS和AUDIO_TS.AUDIO_TS中并没有内容,DVD的所有内容都存放在VIDEO_TS目录之下 ...

  9. java web 的map_javaweb开发过程中小工具系列之将Map转换成对象

    在javaweb项目的开发过程中,经常遇到要将一个Map集合转换成一个javabean对象,比如说将页面提交的数据封装到一个javabean中. 此小工具需要两个jar包 1:commons-bean ...

  10. java自制语音识别,老司机搞定java使用语音识别将文字转换成语音

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到java使用语音识别将文字转换成语音的问题,如果我们遇到了java使用语音识别将文字转换成语音的情况,该怎么处理怎么才能 ...

最新文章

  1. SecureCRT使用
  2. 机器学习之多变量线性回归(Linear Regression with multiple variables)
  3. ros c++ 代码说明文档_减少运维工作量,如何通过 ROS 轻松实现资源编排新方式...
  4. 推荐14款基于javascript的数据可视化工具
  5. pytest测试框架(七)---pytest与jenkins集成(pytest+jenkins+allure)
  6. setsockopt设置socket状态
  7. 那款软件可以测试平板电脑性能,性能测试和应用体验
  8. 计算机常用压缩软件有哪些,电脑用什么解压缩软件比较好?
  9. 证件照制作如此简单——基于人脸检测与自动人像分割轻松制作个人证件照(C++实现)
  10. 二元函数可导与可微的关系_如何理解多元函数可微与可偏导的关系?
  11. c# 游戏设计:人物走动动画
  12. ERROR 1449 (HY000)
  13. 错误隐藏学习手记(五)
  14. 学习记录1.0(基础算法)
  15. java 实现微信授权登陆
  16. Redis进阶—分布式锁
  17. Markdown语法快速入门(印象笔记)(从入门到精通,只有一步之遥)
  18. easyui datagrid 多列checkbox
  19. 用turtle库绘制小猪佩奇
  20. 用PS给外景人像添加逆光效果

热门文章

  1. Service Temporarily Unavailable
  2. Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) - image is bein
  3. 使用python做王者荣耀挂机刷金币脚本
  4. 计算机桌面图标底纹,怎样去除桌面图标下的底色[XP系统]【图文教程】
  5. meltdown linux检测,检查你的Linux PC是否受Meltdown和Spectre安全缺陷影响
  6. MATLAB实现的车牌定位系统
  7. mysql 函数 人民币大写_sql 数字转人民币大写函数(两种方法)
  8. 工业界中NLP(自然语言处理)算法工程师的核心竞争力是什么?
  9. 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。
  10. Arnold置乱变换的代码实现与置乱度分析