首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UTF-8到CP864 (阿拉伯语)转换

UTF-8到CP864 (阿拉伯语)转换
EN

Stack Overflow用户
提问于 2015-03-11 09:20:26
回答 1查看 2.7K关注 0票数 1

我有以下任务:一些以UTF-8书写的拉丁文/阿拉伯文混合文本需要转换为使用POS打印机打印,后者使用的是古老的单字节代码页864

text.getBytes("ibm-864")突然显示了许多问号而不是阿拉伯字符,在深入研究代码之后,我了解到转换表中有一些不同版本的阿拉伯字符,用于映射到ibm-864 (在FExx范围内的某个地方,而不是我的文本中的06xx )。

我正在寻找一些代码或库,这些代码或库可以将阿拉伯unicode转换为cp864,更好地将其映射到相应的阿拉伯字符形式(在cp864中,某些字符有孤立的、初始的、中间的和最终的形式),甚至可能对RTL进行反向处理,因为我怀疑硬件是否会自动支持它。

我知道这是非常具体的任务,但为什么不试一试呢?我也知道如何实现这一点,但我想找到一辆现成的自行车:)

有没有人?

另一种可能的解决方案:库可以将unicode阿拉伯语从range U+0600 - U+06FF Arabic转换为range U+FE70 - U+FF6F Arabic Presentation Forms-B。然后,我可以安全地在cp864中获取字节。有人看到类似的东西了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-10 18:19:45

要将阿拉伯文本输出到相对简单的输出设备,您需要做以下几件事情:

  • 使用Unicode双向算法(UBA)将文本划分为具有不同方向性的块,俗称Bidi。
  • 需要镜像的镜像字符(例如:在LTR/RTL块中打开圆括号指向不同方向)
  • 由于输出设备是哑的,您需要将字符转换为它们的位置形式,并在需要的地方应用连接线( LAM +ALEF有一个连接线)。这是由一个名为阿拉伯Shaper的软件完成的。
  • 您需要根据它们的方向性重新排序文本。
  • 由于CP864没有所有字符的所有位置形式,所以您需要转换为回退形式,将一些最终形式转换为孤立形式,一些中间形式转换为初始形式,一些初始形式转换为孤立形式。文本将不像有适当的形式那样很好地连接起来,但它会相对接近。

在Java上,ICU库允许您这样做:

  • ICU的Bidi可以处理分块、镜像和重新排序。重新排序可以在成形之前完成,因为ICU的ArabicShaping支持以逻辑(预重新排序)和可视(重新排序)顺序处理文本。
  • ICU的ArabicShaping可以处理文本的成形,将其映射到适当的表示形式(您所提到的FExx范围,这并不意味着正常使用,它只用于与遗留软件/硬件的接口,在这种情况下,打印机可以理解CP864,而不是Unicode)。
  • ICU的CharsetProvider和CharsetEncoder可用于对输出字符集以外的字符进行回退(非往返)转换为CP864,在这种情况下,最终的→隔离,中间→初始,.表单。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28982577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档