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

2023-11-12

概述

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

多字节字符集与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 : utf8_to_unicode
 *    Create Date   : 2023/09/16
 *    Author        : heihei
 *    Description   : 将一个UTF-8编码序列,转换为Unicode编号.
 *    Param         : utf8   -- 输入参数,表示UTF-8编码字符串.
 *                    pcount -- 输出参数,表示这个字符表示为UTF-8需要多少字节.
 *    Return Code   : Unicode 字符编号;如果大于0xFFFFFF00,表示处理出错.
 */
INT32U  utf8_to_unicode(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 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • GitHub标星150K的神仙笔记,3个月肝完成功面进美团定级3-2

    俗话说 不想进大厂的程序员不是好程序员 楼主14年小本毕业 离职也有一段时间了 因为一些原因 休整了一段时间 然后3月初开始准备面试 在上家公司工作之余心里一直有着进大厂的执念 上家公司是智能家居互联网行业的 使用的技术框架有dubbo z
  • QNX车载操作系统音频功能扩展Acoustics for Voice 3.0-qnx的音频降噪技术

    锋影 e mail 174176320 qq com QNX的降噪技术 那套有源噪声控制系统只要车内有扬声器和麦克风 就能将车内噪声降低20分贝 这次新发布的Acoustics for Voice 3 0与之功能类似 可以看做是它的升级版
  • Java文件的命名,Java主类,Java中的public类

    编译和运行 Java 程序 HelloWorld java 文件 HelloWorld java public class HelloWorld public static void main String args System out
  • 添加conda环境到Jupyter

    添加conda环境到Jupyter 安装完Anaconda利用conda创建了虚拟环境 但启动jupyter 之后却找不到虚拟环境 实际上是由于在虚拟环境下缺少kernel json文件 解决方法如下 以下操作在Anaconda环境中操作
  • 硬件安全技术——芯片安全设计技术3

    芯片安全设计技术3 一 硬件安全解决方案 1 为什么需要硬件安全 2 传统安全解决方案对比 3 SoC安全解决方案 二 Root of Trust 信任根 1 信任根 RoT 是建立信任链的来源 也是SoC中安全根基 2 安全启动 3 密钥
  • android 短信(SMS)结构解析

    sms主要结构 id 短信序号 如100 thread id 对话的序号 如100 与同一个手机号互发的短信 其序号是相同的 address 发件人地址 即手机号 如 8613811810000 person 发件人 如果发件人在通讯录中则
  • 使用R建立银行贷款违约模型

    一 项目背景及目的 使用R语言对银行的个人贷款是否违约进行预测 帮助业务部门及时发现问题 以避免损失 二 数据说明 本项目数据集来自 数据科学实战 Python篇 数据集包含8个表 账户表accounts 信用卡表card 客户信息表cli
  • 海伯利安Atlas主网映射今日正式启动

    今日21 00时 GMT 8 起 Atlas主网HYN及节点映射将正式开启 从27日15 00时 GMT 8 起 系统将统一进行升级 用户在15 00 21 00 GMT 8 时间段内将无法从交易账户进行提币操作 待主网映射正式开始 将恢复
  • 设计立方体类

    练习案例 设计立方体类 1 设计立方体类 cube 2 求出立方体的面积和体积 3 分别用全局函数和成员函数判断两个立方体是否相等 include
  • 为什么Java有了synchronized之后还造了Lock锁这个轮子?

    众所周知 synchronized和Lock锁是java并发变成中两大利器 但是为什么Java有了synchronized之后还是提供了Lock接口这个api 难道仅仅只是重复造了轮子这么简单么 本文就来探讨一下这个问题 谈到这个问题 其实
  • 手写算法-python代码实现DBSCAN

    手写算法 python代码实现DBSCAN 原理解析 代码实现 实例演示与sklearn对比 总结 原理解析 上篇文章我们优化了Kmeans聚类算法 最后留下一个问题 Kmeans只适合处理凸样本集 不适合处理非凸样本集 这个问题 怎么解决
  • 2023最系统的网络安全学习路线

    什么是网络安全 网络安全是指保护计算机网络及其系统和应用程序的安全性和完整性 防止未经授权的访问 攻击 病毒 恶意软件和其他安全威胁 它是通过技术 管理和教育等综合手段来确保网络信息安全 网络安全包括网络防火墙 入侵检测系统 数据加密 网络
  • 【大模型】开源大模型汇总以及微调策略

    目录 前言 LLaMA stanford Alpaca Guanaco Vicuna Chinese LLaMA Alpaca Chinese Vicuna Luotuo Chinese Falcon OpenBuddy Falcon Ch
  • 数据结构第一章内容(思维导图以及概要)

    思维导图和内容概要 一 数据结构的基本概念 ps 与数据元素本身的形式 内容 相对位置 个数无关的是数据的逻辑结构 通常要求同一逻辑结构中的所有数据元素具有相同的特性 这意味着不仅数据元素所包含的数据项的个数要相同 而且对应数据项的类型要一
  • (一)python爬虫验证码识别(去除干扰线)

    一 python爬虫验证码识别 去除干扰线 1 开发环境与工具 python27 sklearn pytesser opencv等 pycharm windows7 2 数据集 用request库爬虫抓取某一网站验证码1200张 并做好标注
  • 满满的干货!java计算公式引擎

    Spring 全家桶 Spring 原理 Spring面试题 思维导图 面试题 Spring视频 Spring 原理 Spring特点 Spring 核心组件 Spring常用模块 Spring主要包 Spring常用注解 Sping第三方
  • MYSQL数据库锁常用sql(解决锁表,锁库)

    MYSQL数据库锁常用sql 解决锁表 锁库 查询数据库锁 SELECT FROM INFORMATION SCHEMA INNODB LOCKS 查看等待锁的事务 SELECT FROM INFORMATION SCHEMA INNODB
  • 谷歌整体战略:关于人工智能、云服务和登月计划的未来

    转载自我的博客 谷歌整体战略 关于人工智能 云服务和登月计划的未来 CB Insights 今日发布了一篇关于谷歌业务战略的深度分析报告 Google Strategy Teardown Betting The Future On AI C
  • qt自定义标题栏和边框_在Windows 7中自定义标题栏和其他系统字体

    qt自定义标题栏和边框 Would you like to tweak your title bar and menu fonts in Windows 7 Here s how you can change those little se
  • 嵌入式软件国际化(多语言) 点阵字库选择分析

    概述 嵌入式软件国际化 多语言 点阵字库选择分析 多字节字符集与unicode 多字节编码最大的问题在于每一个语种的字符集编码不兼容 unicode的好处在于将所有人类语种字符都有了统一的编码 现在世界上语言基本都包含在了基本多文种平面0上