用Delphi2010做一个点阵字库软件,字库生成部分是从一个用Delphi2007做旧的程序里扣出来的。点阵字库软件完成后生成GB2312字库在LED控制卡上显示为乱码。知道Delphi版本高于2009(含),则Delphi是unicode版本,旧程序无问题,那么问题肯定出在编码转字符部分,于是查到
S : String;
S := Chr(Q) + Chr(W); // Q 和 W 分别是GB2312区域码的高字节和低字节
在GB2312编码表找到字符“啊”的区域码为 B0A1,用
ShowMessage(Chr($B0) + Chr($A1););
显示出字符果然不对。
Delphi版本高于2009(含),则Delphi是unicode版本,函数Chr返回的是对应编码的unicode字符。对于英文字母、数字等,和低版本的返回结果一致;对于汉字,则一般返回对应编码的unicode字符。
于是改用AnsiChar();
ShowMessage(AnsiChar($B0) + AnsiChar($A1));
显示字符为“啊”。
至此问题解决。