关于源代码的编码问题

Posted on 2009-03-04 22:27  活着就是幸福  阅读(568)  评论(0编辑  收藏  举报

目前这个项目是日本人的源代码拿过来的,他们使用的是VS自动建立源码时的编码,也就是说,在中文XP上,自动创建的是GBK编码的文件,而在日文环境下自动建立的是SHIFT-JIS编码的文件,那么如下转换发生时:

GBK-> UNICODE

UNICODE -> GBK

UNICODE -> SHIFT-JIS

SHIFT-JIS-> UNICODE

以上四种使用ConvertZ转换的结果可以看到是【无损】的。

GBK-> SHIFT-JIS : 中文字符串损坏

SHIFT-JIS-> GBK : 日文字符串损坏

下面就是要说的问题:

在代码源文件不存为UNICODE编码的前提下(为UNICODE编码没有测试),若代码中有非英文字符串(也就是wchar_t*),那么代码会先被转换成当前Windows环境下的编码格式再进行编译,例如SHIFT-JIS编码文件在中文Windows下编译,会先被转换成GBK格式再编译。那么字符串中间的日文就会损坏掉,此时若有类似于::DrawText( const wchar_t* )之类直接使用串进行字符查找和屏幕显示的接口,就会发生找不到字符串或打印出乱串的行为。因此我们的项目不得不在VMWare中在日文Windows下进行编译,不能使用并行编译工具,速度非常慢。

没有测试存成UNICODE编码时会发生转换否,但无论如何可以有几个结论:

1. 代码尽量储存成为UNICODE编码,方便多语言开发。

2. 代码即使存成UNICODE编码, 也尽量用英文写注释,有人可能说,我的烂英文写出来让人看不懂,还不如写拼音,我觉得抱着这种心态,什么时候英文水平才能上去,的确相当成问题。

我英语也很烂,但是坚持用简明易懂的单词和句式写东西,写注释又不是写讲稿作文,用法和句式需要花里胡哨。

3.  不要在代码中直接写文字作为字符串,特别是非英文,这东西肯定要扔到资源文件中,否则就会遇到像上面那种情况,转码损坏,相当麻烦。