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

在Unicode中,为什么阿拉伯数字有两种表示法?,unicode,arabic,Unicode,Arabic,我在读Unicode@Wikipedia()的规范 我看到每个阿拉伯数字都有2个Unicode码点。 例如,示例1定义为U+0661和U+06F1 我应该使用哪种代码?表示数字4,U+0664还是U+06F4,您更喜欢哪种代码 ٤还是۴ 为了保持一致,请让此选项指导您对1、2和其他重复代码使用哪些代码。根据,U+0660。。U+0669是阿拉伯-印度数字值0到9,而U+06F0。。U+06F9是扩展的阿拉伯-印度数字值0到9 在Unicode 3.0的书中(5.2是当前版本,但这些东西设置后不会

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


我应该使用哪种代码?

表示数字4,U+0664还是U+06F4,您更喜欢哪种代码

٤还是۴

为了保持一致,请让此选项指导您对1、2和其他重复代码使用哪些代码。

根据,U+0660。。U+0669是阿拉伯-印度数字值0到9,而U+06F0。。U+06F9是扩展的阿拉伯-印度数字值0到9

在Unicode 3.0的书中(5.2是当前版本,但这些东西设置后不会有太大变化),U+066n系列的字形标记为“阿拉伯-印度数字”,U+06Fn系列的字形标记为“东方阿拉伯-印度数字(波斯语和乌尔都语)”。 它还注意到:

  • U+06F4-“波斯语和乌尔都语的不同铭文”
  • U+06F5-“波斯语和乌尔都语共享与阿拉伯语不同的字形”
  • U+06F6-“不同于阿拉伯语的波斯铭文”
  • U+06F7-“乌尔都语字形不同于阿拉伯语”
作为比较:

  • U+066n:
  • U+06Fn:
或者,通过将信息制成标题来放大:

U+066n: U+06Fn: 或:

(您是否可以看到其中的任何一种,以及它们之间的区别程度可能取决于您的浏览器和机器上安装的字体以及其他任何东西。我可以清楚地看到4和6上的区别;5在这两种情况下看起来几乎相同。)


基于此信息,如果您使用的是来自中东的阿拉伯语,请使用U+066n数字系列;如果您使用的是波斯语或乌尔都语,请使用U+06Fn数字系列。作为一个Unicode应用程序,您应该接受任意一组代码作为有效数字(但您可能会对混合了这两组数字的序列产生怀疑,或者您可能会置之不理)。

一般来说,您不应该在应用程序中硬编码此类信息

  • 在Windows上,您可以将GetLocaleInfo与LOCALE\u snativeGits一起使用
  • 在Mac上使用kCFNumberFormatterZeroSymbol的CFNumberFormatterCopyProperty
  • 或者使用类似的方法
有些阿拉伯国家默认不使用阿拉伯-印度数字。因此,没有直接映射表示阿拉伯语->阿拉伯-印度数字


而且用户可能已经更改了控制面板中的默认值。

+1:如果你没有在1分钟内打败我,你就会做出这个答案;-)遗憾的是,每个人似乎都认为差异无关紧要,并急于做出不明智的回答……大致上这意味着他们不应该有两个代码点。事实上,它们在三种不同的语言中看起来是不同的,这是一个字体问题,不应该在脚本中进行编码。乌尔都语字符编码在不同的点上有一些类似的问题,因为它们看起来不同,即使它们是同一个字母。因此,正确的解决方案是,如果字符是阿拉伯语或乌尔都语,则使用不同的字体来显示字符。Unicode学习阿拉伯语的乐趣。@Dwayne:是的,不,也许吧。我可以看到这个论点,但是为什么他们不重新定位代码点U+0030..U+0039,并说在阿拉伯语字体中,这些应该显示为阿拉伯数字。可能有足够好的理由做出决定——即使没有,这也是标准的状态。请注意,阿拉伯文信函的呈现形式现在已列入补编。阿拉伯语范围为:U+0600..U+06FF中的阿拉伯语;U+0750..U+077F阿拉伯文补编;U+08A0..U+08FF中的阿拉伯文扩展-A;阿拉伯语表示形式-A,U+FB50..U+FDFF;和阿拉伯语表示形式-B在U+FE70..U+FEFF中。是的,乌尔都语几乎总是使用心形5,而不是圆形5。。。最好是在您自己的程序中进行规范化(如果您正在解析)。也许有一个自由党。但是,我无法理解谁会用键盘来书写这些人物,也许有一种机制可以做到这一点。
     U+066n    U+06Fn
0      ٠         ۰
1      ١         ۱
2      ٢         ۲
3      ٣         ۳
4      ٤         ۴
5      ٥         ۵
6      ٦         ۶
7      ٧         ۷
8      ٨         ۸
9      ٩         ۹