前一篇文章提到的是SDL中的英文点阵显示,原理上汉字的显示也是相同的,不过由于汉字较多,有不同的编码方式,因此花了些时间写了GBK和UTF-8两种编码的点阵显示,网上有很多文章介绍SDL中显示GBK编码的汉字,基本上是按搬DOS下汉字显示的方式,我主要说一下Linux的UTF-8编码的汉字显示。
由于点阵字库的排序都是按照区位码的方式在HZK16这样的文件中保存,因此如果需要显示汉字必须先得到汉字的区位码,由于GBK编码的汉字转换区位码比较简单:
char *s = “中”;
区码:(unsigned char)s[0]-161;
位码:(unsigned char)s[1] - 161;
你至少得明白GBK编码的汉字是由两个字节组成。但是UTF-8与区位码之间的转换就比较麻烦,我到现在具体的实现还不清楚,大概就是先把UTF-8转换为GBK(使用查表的方式可能比较好),然后再由GBK转换为区位码。在网上找了好长时间只找到了VB的实现,看不懂就先用了Linux下的ivcon这个库来进行编码转换,这个库应该是一般Linux系统都有的吧,如果没有的话我还得考虑自己实现这个编码转换。
具体的代码我就不贴出来了,因为还不完善,谁有兴趣可以给我发邮件索取。
Comments
Amankwah: 最后还是用ivcon的库了,这个一般都有的吧。我估计所谓utf-8转GBK也就是查表了,想不出还有什么可以简化的关系。