阿拉伯文和希伯来语

若想在minigui的开发中使用阿拉伯文和希伯来语,我们应该搞清楚以下几个问题:它们的显示和存储形式、为什么要显示和其他语言不同以及阿拉伯文的变形。

BiDi算法

在了解那么语言显示的情况,在我们所接触的很多国家语言都是右向左显示的即RTL(right  to  left),阿拉伯和希伯来确是左到右显示的即LTR(left to right),所谓bidi算法目前为双向显示,也就是一段文字中有RTL也有LTR的文字,这也是算法高明处, BiDi 算法可以确定每个字符的文字方向,从而将逻辑顺序转换成视觉顺序,或是用于与遗留系统交换数据进行存储布局转换。也让混合语言可以正确显示.如下所示

Bidi

输入

开始

שםשלהתקןenglish

显示

(翻转)english

 

1.

 

希伯来语和英语

十六进制存储形式

שםשלהתקן

0xd7  0x9e 0xd7 0xa1 0x20 0xd7 0xa2 0xd7 0xa1  0x20 …..

English

0x45  0x6e  0x67  0x6c  0x69  0x73  0x68

 

联系:都是以二进制的形式存储

区别: ascill码一对一的形式存储如:E 对应0x45

而阿拉伯文和希伯来语一对二的形式如:ש对应0xd7 0xa1

 

 

1.2 阿拉伯文和希伯来语实现思路

   阿拉伯文和希伯来语是以空格为标准将字符进行转换的,所以代码就用0x20来判断是不是空格,如下图:

conext      0xd7  0x9e 0xd7 0xa1 0x20 0xd7 0xa2 0xd7 0xa1

 

                            End           start

第一步:str      开始为空

       str      0xd7 0xa10xd7 0xa2

第二步

str      0xd7 0xa10xd7 0xa2 0x20

第三步

       conext      0xd7  0x9e 0xd7 0xa1 0x20 0xd7 0xa2 0xd7 0xa1

 

                   end            start

 

str      0xd7 0xa10xd7 0xa2 0x20 0xd7 0xa1 0xd7 0x9e      翻转后值

  由于后面有ascill的问题,在混合的时候不仅判断空格也判断是不是小于0x7f,ascill码表中这是表的最大值,为了区分,在字库中阿拉伯和希伯来语存储时大于ascill码的最大值得,所以代码中用不翻转的形式显示。

如下:

  Conext       Arabic English

 

                          End  start

第一步:str    English

 

第二步:

   Conext       Arabic English

 

                  End  start

  str    English   Arabic翻转后)

 

    标点符号也是常见的,阿拉伯文中符号和阿拉伯文是没有空格的这样代码又会有问题,特别是冒号,在我们看到的是尾部,在存储翻转时却在最开始,所以加了一个冒号时当空格来使,即在遇到标点符号的时候也让其将之前部分显示,标点符号直接输出。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值