utf-8,EUC-JP、Shift-JIS这三种编码的字体如何解码

时间:2022-02-24 11:01:54
utf-8,EUC-JP、Shift-JIS这三种编码的字体如何解码??

我的意思是,假如有“Hello!”这样一个字符串,如果提取每个字符,然后在对于的字库中找到该字母的位图???

我感觉这样描述还不是很清楚,我在解释一下:

如果把“Hello”换成“こんにちは”,应该如何从对应的字库中提取出来位图??

这样的字符串,如何识别是如何编码的呢??

有开源的软件吗,或者实现方法,要求是c语言的。

望不吝赐教,十分感谢!

5 个解决方案

#1


你这个是编码转换吗,hello在日文中应该也是hello啊。你还是从日文的编码表看吧,看范围是怎么样的,看各个字符的范围是怎么样的。

#2


libiconv转换库,有源码的
http://www.gnu.org/software/libiconv/

#3


那如果我随便打个字符串,如“こんにちは”,那这个字串是如何编码的呢??

#4


楼主这是两个问题.
第一,字符的编码.同一个字符在不同的字符系统里的编码形式不同.简单点理解,就是字符的序号不同.一般情况下就是建立映射表,然后查表. utf-8这种有点特殊,它实际上是ucs-4的变种.它们的字符索引是相同的,但描述索引编号的形式不同.ucs4的编号就是一个32位整数.而utf-8则是对原始的编号进行变形,使编号的编码与ASCII编码兼容.其基本原则是ucs4中与ASCII对应的前127个编码不变,大于127的字符,用多于一个字节的编码描述.使每个字节的首位为1,而首字节高位连续的1的位数表示编码的长度,编码中剩下的位用来保存具体的编码.所以,utf-8和ucs-4可以通过特定的算法转换,而不用查表.
目前,ucs是国际通行的字符标准,像utf-16,utf-8都是它的变种编码.
第二,字库的编码.由于ucs是字符标准.所以,现在比较新的字库基本上都是用它的编号来做字符索引的.一般来说,使用这些字库都要把你用的字串转为ucs编码,然后才能查得它在字库里的位置.但一些老的字库,其编码形式就不好说了.很多是直接使用其本地字符集的编号.而字库的格式不同,其存储结构也不同,所以要看相应的标准才能得知具体的使用方法.这个你可以参考freetype.

#5


谢了,明白了,那我就研究研究freetype和iconv吧

#1


你这个是编码转换吗,hello在日文中应该也是hello啊。你还是从日文的编码表看吧,看范围是怎么样的,看各个字符的范围是怎么样的。

#2


libiconv转换库,有源码的
http://www.gnu.org/software/libiconv/

#3


那如果我随便打个字符串,如“こんにちは”,那这个字串是如何编码的呢??

#4


楼主这是两个问题.
第一,字符的编码.同一个字符在不同的字符系统里的编码形式不同.简单点理解,就是字符的序号不同.一般情况下就是建立映射表,然后查表. utf-8这种有点特殊,它实际上是ucs-4的变种.它们的字符索引是相同的,但描述索引编号的形式不同.ucs4的编号就是一个32位整数.而utf-8则是对原始的编号进行变形,使编号的编码与ASCII编码兼容.其基本原则是ucs4中与ASCII对应的前127个编码不变,大于127的字符,用多于一个字节的编码描述.使每个字节的首位为1,而首字节高位连续的1的位数表示编码的长度,编码中剩下的位用来保存具体的编码.所以,utf-8和ucs-4可以通过特定的算法转换,而不用查表.
目前,ucs是国际通行的字符标准,像utf-16,utf-8都是它的变种编码.
第二,字库的编码.由于ucs是字符标准.所以,现在比较新的字库基本上都是用它的编号来做字符索引的.一般来说,使用这些字库都要把你用的字串转为ucs编码,然后才能查得它在字库里的位置.但一些老的字库,其编码形式就不好说了.很多是直接使用其本地字符集的编号.而字库的格式不同,其存储结构也不同,所以要看相应的标准才能得知具体的使用方法.这个你可以参考freetype.

#5


谢了,明白了,那我就研究研究freetype和iconv吧