嵌入式软件国际化(多语言) 点阵字库选择分析

嵌入式软件国际化(多语言) 点阵字库选择分析

多字节字符集与unicode

  • 多字节编码最大的问题在于每一个语种的字符集编码不兼容。
  • unicode的好处在于将所有人类语种字符都有了统一的编码。现在世界上语言基本都包含在了基本多文种平面0上(BMP0)即编号只占用2个字节。

字符集选择相关问题分析

方案1.不使用unicode 使用所谓的ANSI

  • 如果中文版本就是使用ANSI(中文标准即GB2312),那么对于继续支持英文、德文是没有问题的。而对于俄文、日文却支持的不够全面,毕竟这是中文的标准。
  • 每一种语言包资源文件的编码格式不相同。虽然都叫ANSI,但是每一种语言的标准是不同的。只有这样才能从字库中解析出正确的字符。
  • 多支持一个语种就需要多,烧写一种相互不兼容的字库(毕竟一个语种和另外一个语种的ANSI是不一样的),相应的字符解析部分代码也需要许多条件判断进行不同的算法分析,以显示出正确语种的字符。

方案2.使用unicode

  • 首先语言包资源文件的格式都可以是一样的编码方式(UTF-8(BOM)、UTF-8、UCS-2 Big endian、UCS-2 Little endian)。
  • 只需要烧写同一中字库就OK了,一劳永逸,如果空间不够大,可以至少写里面的某些片段。
  • 对于同一种编码格式(以UTF-8为例),需要写两个转换算法,即UTF-8编码到Unicode编号和Unicode编号到UTF-8。
  • 如果使用UTF-8编码,由于其对于每一个字符编码所占用的空间是不定的(1字节-3字节),所以有可能导致源代码中的字符串空间越界,毕竟原来是固定每个汉字都是占用两个字节。
  • 如果使用UCS-2编码,那么每一个字符都将用2个字节表示,字符的编号和文档中存储的字符编码是相等的。那么对于编号比较小的字符字符ASCCI码,就会在编码高位中会出现0x00这样的数字,而0x00又是一个字符串的结束标志,所以如果使用UCS-2编码就需要通过代码来区分两种情况了。

结论

  • 对于支持语言种类比较少的,有明确目标支持某些语言,可以选择第一种方案。比较平滑。
  • 对于国际化进程比较深入的,可以选择第二种方案,虽然前期比较困难,但是后期会很顺。

相关代码共享:

1.UTF-8到unicode的转换:

以下为将UTF-8转为Unicode的C语言代码,
这部分代码经过测试,能够正确执行,没有发现明显问题:

/*
 *    Function Name : utf82unicode
 *    Create Date   : 2015/07/23-2015/07/24
 *    Author        : Houlw-Houlw
 *    Description   : 将一个UTF-8编码序列,转换为Unicode编号.
 *    Param         : utf8   -- 输入参数,表示UTF-8编码字符串.
 *                    pcount -- 输出参数,表示这个字符表示为UTF-8需要多少字节.
 *    Return Code   : Unicode 字符编号;如果大于0xFFFFFF00,表示处理出错.
 */
INT32U  utf82unicode(INT8U *utf8,INT8U *pcount)
{
    INT32U  unicode;
    INT8U   countbyte,i;
    
    unicode = 0xFFFFFFFF;
    countbyte = 0;
    /* Analysis of the first byte */
    i=0;
    if(utf8[0]<0x80)                             /*   0000 ~ 00 007F  0XXX XXXX            */
    {
        countbyte = 1;
        unicode = utf8[i];
    }else if((utf8[0]&0xE0) == 0xC0)             /*   0080 ~ 00 07FF  110X XXXX  10XX XXXX */
    {
        countbyte = 2;
        unicode = (utf8[i]&(~0xE0));
    }else if((utf8[0]&0xF0) == 0xE0)             /*   0800 ~ 00 FFFF  1110 XXXX  10XX ...  */
    {
        countbyte = 3;
        unicode = (utf8[i]&(~0xF0));
    }else if((utf8[0]&0xF8) == 0xF0)             /* 1 0000 ~ 1F FFFF  1111 0XXX  10XX ...  */
    {
        countbyte = 4;
        unicode = (utf8[i]&(~0xF8));
    }else if((utf8[0]&0xFC) == 0xF8)             /* 2 0000 ~ 3F FFFF  1111 10XX  10XX ...  */
    {
        countbyte = 5;
        unicode = (utf8[i]&(~0xFC));
    }else if((utf8[0]&0xFE) == 0xFC)             /* 4 0000 ~ 7F FFFF  1111 110X  10XX ...  */
    {
        countbyte = 6;
        unicode = (utf8[i]&(~0xFE));
    }
    
    if(pcount != NULL)
    {
        *pcount = countbyte;
    }
   
    /* Analysis of remaining bytes */
    for(i++;i<countbyte;i++)
    {
        if((utf8[i]&0xC0) == 0x80)
        {
            unicode <<= 6;
            unicode |= (utf8[i]&(~0xC0));
        }else{                                   /* Error Code  */
            unicode = 0xFFFFFF00|(countbyte<<4)|i;
            break;
        }
    }
    return unicode;
}

作者:

转载于:https://www.cnblogs.com/LeviHou/p/4669724.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
v1.06 (20120410) FontMaker(点阵字库) 1. 增加系统字体支持,操作更简单,快捷。 v1.05 (20120324) FontMaker(点阵字库) 1. 修正了字符对齐问题。 2. 增加了单个字符或多个字符输出成位图文件设定。 3. 完善了阿拉伯文字库(unicode 字库有效)。 4. 增加自定义字符功能(unicode 字库有效)。 Multi-language(多国语言) 1. 增加输出编码格 (mbcs, utf16-lb, utf8)设置 2. 增加数组格输出。 Image Manager(图像管理) 1. 该页为新增功能,支持图片图像的数据转换。主要应用在做产品logo图片方面。 V1.04 (20110716) 1. 增加了一个字符串mbcs2unicode(内码转统一码)的功能。 (支持转:U16-LE, U16-BE, UTF8) V1.03 (20110705) 1. 修改了 Example 中点阵字库解析源码,更加便于移植。(基本做到只需修改font_file.c 即可) 2. 修改了内码(MBCS)字库点阵信息读取的一个错误。 3. 增加了多语言支持(简中,英文),还有待完善。。。 V1.02 (20110701) 1. FontMaker V2.03 a. 增加字符宽高比调节(HorR & VerR) b. 增加对*.ttc 字库的支持。 c. 增加bdf(*.bdf)文件格转Simple Unicode编码格的bin文件。 V1.01 (20110629) 1. FontMaker V2.02 a. 增加了 Simple Unicode功能。(适合小字库) b. 增加了 “扫描方向及反显”设置。 2. Multi-Language V1.01 a. 修改了除 office 2000 外,其它不能支持的问题。 V1.00: (20110627) 1. 继承 FontMaker V2.01 的所有功能。 2. 增加了一个 Multi-Languge V1.00 的打包转换功能。 FontMaker 基本功能: 1.支持所有 windows 字符集:CP932(日文Shift-JIS)CP936(简体中文GBK)CP949(韩文)CP950(繁体中文 Big5),CP874(泰文),CP1250(中欧)CP1251(西里尔文),CP1252(西欧--"拉丁文I"),CP1253(希腊文), CP1254(土耳其文),CP1255(希伯来文),CP1256(阿拉伯文),CP1257(波罗的海文),CP1258(越南) 2.支持非等宽字库。 3.支持BIN,TXT,BMP,BDF 文件输出。 4.支持unicode字库输出,即可以做到在一个窗口中同时显示多国语言(文字) 5.支持单个字符编辑,预览(所见即所得)。 6.支持字库文件和输出路径记忆功能 7. 支持从bdf格转换自定义字库(bin文件)格
v1.11 (08/14/2012) 1. 增加注册年限选择。 v1.10 (06/26/2012) 1. 精简字库检索表。 2. 增加 GBK 字库输出。 3. 增加一种点阵数据存储格(只存有效像素数据--not fixed, 不支持MBCS编码格的中日韩), 对泰文,缅甸文等特殊语种显示非常便捷。 v1.09 (06/15/2012) 1. 增加输出 C 语言(数组) 字体格。 V1.08 (05/17/2012) 1. 增加了两个版本(免费和试用版) 免费版 只对 16点阵有效。 试用版 对所有点阵有效,但是会缺部分字符。 2. 增加热键功能。 3. 修改了多国语言生成.h文件时,start 与 end 不匹配的bug。 4. 完善文档《GuiTool 使用说明》, 增加更多图解说明。 文档下载地址: http://ishare.iask.sina.com.cn/f/24472766.html v1.07 (05/02/2012) 1. 修改注册方(改为文件)。 2. 增加bdf格编码过滤功能,主要是为了支持 MTK 手机点阵字库。 3. 增加xp控件属性。 4. 增加扫描模图解。 5. 修改了 bdf 2 bin 的一个bug。(选择输出位图时,会输出n个位图文件) 6. 修改了 BDF 文件中当字符显示宽度为0,存位图(所有字符存一张图片)失败的错误。 v1.06 (04/10/2012) 1. 增加系统字体支持,操作更简便,快捷。 枚举所有已安装系统字体,直接选择即可。 v1.05 (03/24/2012) Fontmaker(点阵字库) 1. 修正了字符对齐问题。 2. 增加了单个字符或多个字符输出成位图文件设定。 3. 完善了阿拉伯文字库(unicode 字库有效)。 4. 增加自定义字符功能(unicode 字库有效)。 Multi-language(多国语言) 1. 增加输出编码格 (mbcs, utf16-lb, utf8)设置 2. 增加数组格输出。 Image Manager(图像管理) 1. 该页为新增功能,支持图片图像的数据转换。主要应用在做产品logo图片方面。 V1.04 (07/16/2011) 1. 增加了一个字符串mbcs2unicode(内码转统一码)的功能。 (支持转:U16-LE, U16-BE, UTF8) V1.03 (07/05/2011) 1. 修改了 Example 中点阵字库解析源码,更加便于移植。(基本做到只需修改font_file.c 即可) 2. 修改了内码(MBCS)字库点阵信息读取的一个错误。 3. 增加了多语言支持(简中,英文),还有待完善。。。 V1.02 (07/01/2011) 1. FontMaker V2.03 a. 增加字符宽高比调节(HorR & VerR) b. 增加对*.ttc 字库的支持。 c. 增加bdf(*.bdf)文件格转Simple Unicode编码格的bin文件。 V1.01 (06/29/2011) 1. FontMaker V2.02 a. 增加了 Simple Unicode功能。(适合小字库) b. 增加了 “扫描方向及反显”设置。 2. Multi-Language V1.01 a. 修改了除 office 2000 外,其它不能支持的问题。 V1.00: (2007-2011) 1. 继承 FontMaker V2.01 的所有功能。 2. 增加了一个 Multi-Languge V1.00 的打包转换功能。 FontMaker 基本功能: 1.支持所有 windows 字符集:CP932(日文Shift-JIS)CP936(简体中文GBK)CP949(韩文)CP950(繁体中文 Big5),CP874(泰文),CP1250(中欧)CP1251(西里尔文),CP1252(西欧--"拉丁文I"),CP1253(希腊文), CP1254(土耳其文),CP1255(希伯来文),CP1256(阿拉伯文),CP1257(波罗的海文),CP1258(越南) 2.支持非等宽字库。 3.支持BIN,TXT,BMP,BDF 文件输出。 4.支持unicode字库输出,即可以做到在一个窗口中同时显示多国语言(文字) 5.支持单个字符编辑,预览(所见即所得)。 6.支持字库文件和输出路径记忆功能. 7. 支持从bdf格转换自定义字库(bin文件)格

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值