21

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

我应该使用哪一个?

4

3 回答 3

46

根据代码图表,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: 012344567789

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

U+066n: ٠١٢٣٤٥٦٧٨٩

U+06Fn: 012344567789

或者:

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

(您是否可以看到其中的任何一个,以及它们的区别程度可能取决于您的浏览器和您机器上安装的字体以及其他任何东西。我可以清楚地看到 4 和 6 的区别;5 在两个都。)

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

于 2009-11-04T21:01:04.660 回答
4

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

  • 在 Windows 上,您可以将 GetLocaleInfo 与 LOCALE_SNATIVEDIGITS 一起使用。
  • 在带有 kCFNumberFormatterZeroSymbol 的 Mac CFNumberFormatterCopyProperty 上。
  • 或使用ICU 之类的东西。

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

无论如何,用户可能已经更改了控制面板中的默认设置。

于 2009-11-11T07:46:38.267 回答
1

你更喜欢哪个代码来表示数字 4,U+0664 还是 U+06F4?

(٤ 或 4 )?

为了保持一致,让这个选择指导您使用哪些代码来表示 1、2 和其他重复代码。

于 2009-11-04T20:51:21.000 回答