2.2 编译的问题
因为我只使用gbk对ELONA进行过汉化,所以本文之后也是更多的基于gbk而非utf。
虽说gbk与shiftjis比较相似,但是还有有一点点差别的,问题出在shiftjis中的半角假名。
在gbk中低于128的字符是单字节,而高于128的字符为双字节。
而在shiftjis中除了低于128的部分,介于160与223以及大于253的部分,也是单字节。
所以,在直接使用shiftjis的规则对待gbk字符串时,会遇到一些诡异的问题。
比如说,如果在不转码的情况下运行,mes "足"; (意思是输出 足 )时,输出的不是 足 而是 足"; ,
这是因为"足";的gbk编码是 34 215 227 34 59,程序读取到第一个34(双引号)时,判断这是一个字符串,
然后读到215,因为在shiftjis中这是单字节的,所以程序继续读227,程序认为他是双字节,
于是下一个34,字符串结束的双引号被略过了。而HSP中双引号是可以不匹配的,程序会一直读到换行。
所以,最后输出的不是 足 而是 足";,对于这样的简单语句来说,只是输出错误,
而对于复杂如ELONA的代码来说,会根本无法编译。
2.2.1 读取外部文本
既然gbk在代码中会无法编译,那么将文本放到外部的txt中,由程序在运行时读取,是不是就可以解决问题呢?
答案是肯定的,这样做会稍微麻烦一些,但是在安全性方面会有特别的优势,这点放到下面。
2.2.2 修改HSP编译器
既然编译器认为文本是shiftjis,那么如果修改编译器,使其支持gbk,是不是就可以解决问题呢?
答案也是肯定的,只讲目光聚集在编译期的话,这个方法可以说是完美无缺,也是很自然的一个方法。