在Unicode中,为什么阿拉伯数字有两种表示形式?

时间:2009-11-04 20:41:23

标签: unicode arabic

我正在阅读Unicode @ Wikipedia(Arabic Unicode)的规范 我看到每个阿拉伯数字都有2个Unicode代码点。 例如,1被定义为U + 0661和U + 06F1。

我应该使用哪一个?

3 个答案:

答案 0 :(得分:41)

根据code charts,U + 0660 .. U + 0669是ARABIC-INDIC DIGIT值0到9,而U + 06F0 .. U + 06F9是EXABENDED ARABIC-INDIC DIGIT值0到9。

在Unicode 3.0书中(5.2是当前版本,但这些东西在设置后没有太大变化),U + 066n系列字形被标记为'阿拉伯语 - 印度数字'和U + 06Fn系列字形标有'东部阿拉伯语 - 印度数字(波斯语和乌尔都语)'。 它还指出:

  • U + 06F4 - '波斯语和乌尔都语中的不同字形'
  • U + 06F5 - '波斯语和乌尔都语共享与阿拉伯语不同的字形
  • U + 06F6 - '与阿拉伯语不同的波斯字形'
  • U + 06F7 - '乌尔都语与阿拉伯语不同'

进行比较:

  • U + 066n:0123456789
  • U + 06Fn:0123456789

或者,通过将信息变为标题来扩大:

U + 066n:0123456789

U + 06Fn:0123456789

或者:

     U+066n    U+06Fn
0      ٠         ۰
1      ١         ۱
2      ٢         ۲
3      ٣         ۳
4      ٤         ۴
5      ٥         ۵
6      ٦         ۶
7      ٧         ۷
8      ٨         ۸
9      ٩         ۹

(你是否可以看到其中的任何一个,以及它们与众不同的程度可能取决于你的浏览器和机器上安装的字体。我可以清楚地看到4和6的区别; 5看起来很多两者都是一样的。)

根据这些信息,如果您正在使用中东的阿拉伯语,请使用U + 066n系列数字;如果您使用波斯语或乌尔都语,请使用U + 06Fn系列数字。作为Unicode应用程序,您应该接受任意一组代码作为有效数字(但您可能会看到混合两组数字的序列 - 或者您可能只是单独留下)。

答案 1 :(得分:4)

通常,您不应在应用程序中对此类信息进行硬编码。

  • 在Windows上,您可以将GetLocaleInfo与LOCALE_SNATIVEDIGITS一起使用。
  • 使用kCFNumberFormatterZeroSymbol在Mac CFNumberFormatterCopyProperty上。
  • 或使用类似ICU的内容。

默认情况下,阿拉伯国家/地区不使用阿拉伯语 - 印度数字。所以没有直接映射说阿拉伯语 - >阿拉伯语 - 印度数字。

用户可能无论如何都更改了控制面板中的默认值。

答案 2 :(得分:1)

您更喜欢使用哪种代码来表示数字4,U + 0664或U + 06F4?

(4或4)?

为了保持一致,请让此选项指导您用于1,2和其他重复代码的代码。