UTF-8到CP864(阿拉伯语)的转换 [英] UTF-8 to CP864 (arabic) conversion

查看:298
本文介绍了UTF-8到CP864(阿拉伯语)的转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下任务:需要使用POS-printer转换一些用UTF-8编写的混合拉丁语/阿拉伯语文本以进行打印,该打印机使用古老的

I have the following task: some text in mixed latin/arabic written in UTF-8 needs to be converted for printing using POS-printer, which uses ancient one-byte code page 864.

text.getBytes("ibm-864")突然显示许多问号而不是阿拉伯字符,并且在挖掘代码后,我了解到转换表具有一些不同版本的阿拉伯字符,用于映射到ibm-864(在FExx范围内而不是06xx范围内,我的文字中有此内容.)

text.getBytes("ibm-864") suddenly shows many question marks instead of arabic characters, and after digging the code I understood that conversion table has some different versions of arabic characters used to map to ibm-864 (somewhere in the FExx range rather than 06xx, which I have in my text).

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

I'm looking for some code or library, which can convert arabic unicode to cp864, preferrably mapping to the corresponding forms of arabic chars (in cp864 there're isolated, initial, medial and final forms for some chars), and maybe even handling reverse for RTL, because I doubt that hardware supports it automatically.

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

I understand that this is very specific task, but why don't give it a try? Also I know how to implement this, but trying to find a ready-to-use bicycle :)

有人吗?

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

Another possible solution: library that can translate unicode arabic from the range U+0600 - U+06FF Arabic to the range U+FE70 - U+FF6F Arabic Presentation Forms-B. Then I can safely get my bytes in cp864. Have anyone seen anything alike?

推荐答案

要将阿拉伯文本输出到相对笨拙的输出设备,您需要做几件事:

To output arabic text to a relatively dumb output device, you'll need to do several things:

  • 使用Unicode双向算法(UBA)将文本分为不同方向性的块,通常称为Bidi.
  • 镜像需要镜像的字符(例如,当它们位于LTR/RTL块中时,括号指向不同的方向)
  • 由于输出设备很笨,因此您需要将字符更改为它们的位置形式,并在需要的地方应用连字(LAM + ALEF有连字).这是通过一个称为阿拉伯塑形机的软​​件完成的.
  • 您需要根据文本的方向性对其重新排序.
  • 由于CP864并不具有所有字符的所有位置形式,因此您需要转换为后备形式,将某些最终形式转换为隔离形式,将某些中间形式转换为初始形式,以及将某些初始形式转换为独立形式.文本不会像使用适当的形式那样好看,但会相对接近.

在Java上,ICU库允许您执行以下操作:

On Java, the ICU library allows you to do that:

  • ICU的Bidi可以划分为块,进行镜像和重新排序.重新排序可以在成形之前完成,因为ICU的ArabicShaping支持以逻辑(预重新排序)和可视(后重新排序)顺序处理文本.
  • ICU的ArabicShaping可以处理文本的形状,将其映射为适当的表示形式(您所谈论的FExx范围,这并不意味着通常会使用,它仅意图与旧版软件/硬件,在这种情况下为理解CP864但不支持Unicode的打印机).
  • ICU的CharsetProvider和CharsetEncoder可用于对不在输出字符集上的字符进行回退(非往返)转换,从而转换为CP864,在这种情况下为最终→隔离,中间→初始...形式.

这篇关于UTF-8到CP864(阿拉伯语)的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆