因有一芬兰语项目,文件以ANSI方式保存,内有注释,有芬兰语。在中文环境下打开,与GBK编码冲突,出现乱码。使用doxygen进行文档化,如果输入的编码采用GBK,则提示错误。因我想用中文对文件进行注释后用doxygen进行文档化,所以需要将芬兰语变化成GBK编码。
在csdn求助,得到不少回复。最终的解决方法记录在案,以备后查。
我尝试了方案如下:
cattycat的方案,因为输出还是有不识别的文字:// Index 0 = Marginaalit pll?pois,其中的?即为不识别的。当然,这是我的经验。所以我没有实际操作。
4楼的回复:
芬兰语是Latin-1编码吧,中文是GBK,这两种编码都是使用0x80~0xFF的扩展ASCII作为码位,有重码,因此无法共存,只能全改UNICODE。现在知道Unicode的那个唯一码的含义了么?
你的乱码显示为汉字的冷僻字,说明芬兰语字母跟GBK汉字编码冲撞了。
你用记事本随便打开一个exe文件,乱码中有大量汉字,不是因为exe文件有汉字,而是恰好撞上了汉字编码。
----
实际操作如下:
用VC2005以Latin-9编码打开,以GBK936存储,在保存的时候,提示有冲突,选择no。结果OK。不过这要人工一个一个文件的搞。搞了一晚上,累死我了。
所以想自己编程。
-------------------
采用7楼的:
你可以写个程序,按照ASCII编码把文件读出来,然后把每个ASCII字符转换为unicode的字符,再保持成unicode文件就好了吧.
用MultiByteToWideChar,先从Latin-9转换成UNICODE,然后用WideCharToMultiByte转换成936。
结果转换后的文字,最后总是多了一截文字。因为太晚了,困,放弃。
-----------------
后看doxygen,用的是iconv库,遂搜索iconv for windows,下载到1.92版本。批处理处理之:
查看了下vcproj文件,发现编码是windows-1252,所以不打算采用latin编码读入了。
批处理文件1,f2gbk.bat
@echo off
echo 将%1从windows-1252编码转换到gbk编码
for %%f in (%1) do copy %%f %%f.1252
for %%f in (%1) do iconv -c -f windows-1252 -t gbk %%f.1252 > %%f
这批处理也是从网上搜索到的。
批处理之二:travel.bat 也是从网上搜索到的。这批处理还真牛。
set path=%path%;"I:/opensource/tools/libiconv-1.9.2-1-bin/bin/"
setlocal EnableDelayedEx
for /f "delims=" %%i in ('dir /b /a-d /s *.cpp *.h') do call f2gbk %%i
endlocal
运行travel .
万事大吉,doxygen顺利工作。