现在的位置: 首页 > 综合 > 正文

泰文的字符拆分

2017年12月21日 ⁄ 综合 ⁄ 共 1151字 ⁄ 字号 评论关闭

泰文比较奇葩,比如下面3个字符:

ผ  ผู   ผู้

第一个是一个字,第二个是第一个穿鞋子,第三个是第一个穿鞋带帽。没错,他们的文字是有鞋子和帽子的。但是穿鞋带帽之后,感觉上应该就成了一个单词,显示确是一个字符。

第一个是3字节,第二个是6字节,第三个是9字节。

前情交代完毕:

我们按照UTF8来拆分字符的时候,显示会错乱,经过我手动测试发现,一个字符居然有9个字节,才能正常显示。WTF!!UTF8最长不是只有6个字节么!!

然后就发现了上面这个鞋子帽子的事情。为毛不把这3个字单独编码!!!

测试证明,虽然是UTF8,但是如果一个字符后面后鞋子或者帽子,他就会把后面的鞋子和帽子组合到一起,来显示一个字符,所以就会造成一个字符超过6个字节的情况。

吐槽完毕,接着说怎么处理这个事情:

        // 以下为处理泰文组合字符情况
        int c=*text;
        if(c==0xE0)
        {
            int c1=*(text+1);
            int c2=*(text+2);
            if((c1==0xb8 && (c2==0xb1 || (c2>=0xb3 && c2<=0xba)))
               ||(c1==0xb9 && c2>=0x87 && c2<=0x8e))
            {
                    CCString* cc=(CCString*)result->lastObject();
                    cc->m_sString.append(curString);
                    。。。 。。。
                    continue;      
            }
            
        }

这是直接在项目代码里面截取的,我不想改了,只需要注意上面C,C1,C2几个char,这是一个UTF8字符的头3字节,如果满足if条件,就把当前字符接到上一个字符的后面去。

注意:上述是基于我的猜测,但是确实能解决问题。泰文编码的资料太少,google又暂时不能上。有可能这不是UTF8编码只是兼容UTF8编码或者什么的,如果有知道真相的请告知。

然后我就从蛋疼的设计这个东西的思路上去想了下为什么要这样设计,这样多怪异啊。为毛不把这3个字符单独编码呢,这不就是王、玉、宝么,然后我想了一晚上,想到如下几个原因:

1、减少编码数量。泰文种这样的组合太多全部单独编码数量太大。

2、还是减少编码数量,但是和上面那个不一样。他们的鞋子和帽子,相对固定,不像我们的王玉宝,王加一点,有可能是玉,也有可能是主,他们就只有这么一种加法。

3、泰国人思维过于奇葩。虽然这是最不可能的。

4、书写习惯。之前说了,一个字加了鞋子帽子之后,相当于一个单词,就像我们写一个test一样,是依次写4个字母,他们就是先写个本体,再写个鞋子,再写个帽子,然后这个鞋子和帽子可以独立成字。不然就是输入的时候,先输入一个字,再输入一个帽子,然后这个帽子就和前面那个字合体了。不过这样说起来好像仍然还是可以独立编码的。这个只能说是泰国人民缺少一个科学的输入法。好冷。。。

以上纯属玩笑,收工。

抱歉!评论已关闭.