泰文utf-8转unicode编码实现

本文介绍了如何将泰文utf-8编码转换为unicode编码,以实现泰文叠加到图片上的过程。首先,解释了泰文utf-8转unicode的原理,包括泰文的unicode编码范围和UTF-8编码规则。接着,详细讲述了通过freetype库进行文字渲染叠加的步骤,并提供了项目代码。最后,讨论了泰文的排版规则,包括鞋子、主体、帽子等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:最近的有个项目是要读取泰文然后将泰文叠加到图片上。查了一周的资料,所有的流程已经走通了。

一、实现原理

想要将泰文叠加到图片上需要两个步骤:

  1. 泰文转成unicode编码: 泰文实际上是utf-8编码的,这也就是编译器以utf-8的格式才可以正常显示泰文的原因。
  2. unicode编码转成泰文并进行图片叠加: 泰文渲染是采用了freetype第三方库进行显示的,freetype需要的是unicode编码,这也就是为什么泰文要先转化为unicode编码的原因。

步骤一:泰文utf-8转unicode

泰文的unicode编码范围是0E00-0E7F,UTF-8将这段范围的字符用三个字节表示。然后如果一个字符后面跟了鞋子和帽子,UTF-8就会将后面的鞋子和帽子与主体组成一体,所以就可以造成一个字符有9个字节的情况。泰文是不是有点小变态(强行吐槽一波)。
比如泰文字符"ผผูผู้",这三个字符的拼写是主体、主体+鞋子和主体+鞋子+帽子。
‘ผ’对应的UTF-8编码是:E0B89C
‘ผู‘对应的UTF-8编码是:E0B89C E0B8B9
‘ผู้’对应的UTF-8编码是:E0B89C E0B8B9 E0B989
大家可以发现泰文的UTF-8编码规则是主体+鞋子+帽子。

UTF-8有点类似于Haffman编码,它将Unicode编码为:
0x00-0x7F的字符,用单个字节来表示;
0x80-0x7FF的字符用两个字节表示;
0x800-0xFFFF的字符用3字节表示;
汉字的unicode范围是:0x4E00~0x9FA5
其实这个范围还包括了中,日,韩的字符。

泰文有效字符(有保留未使用字符)utf-8编码范围是0xE0B880 - 0xE0B99B,Unicode编码范围是0x0E00-0x0E5B,两者有一一对应的关系。所以我使用的方法是见了两个数组存放泰文utf-8编码和unicode编码数据。接收到utf8字符后,组合在utf-8数组里找到对应的数据然后按照索引在unicode编码数组里找到泰文对应的unicode数据。例如:一串泰文字符"ผผูผู้",他的utf-8编码数据是0xe0b89c, 0xe0b89c, 0xe0b8b9, 0xe0b89c, 0xe0b8b9, 0xe0b989。对应的unicode码是:0xe1c, 0xe1c, 0xe39, 0xe1c, 0xe39, 0xe49。
相关实现代码
方法一:

Uint32 Utf8_To_Unicode(Uint8 *s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命如歌,代码如诗

听说,打赏我的人都找到了真爱!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值