在 Unicode 中,为什么阿拉伯数字有两种表示形式?
题
我正在阅读 Unicode @ Wikipedia 的规范(阿拉伯语统一码)我看到每个阿拉伯数字都有2个Unicode代码点。例如,1 定义为 U+0661 和 U+06F1。
我应该使用哪一个?
解决方案
根据 代码表, 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:0123456789
或者,通过将信息制成标题来放大:
U+066n:٠١٢٣٤٥٦٧٨٩
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 应用程序,您应该接受任一组代码作为有效数字(但您可能会怀疑混合两组数字的序列 - 或者您可能只是不理会)。
其他提示
一般来说,您不应该在应用程序中硬编码此类信息。
- 在 Windows 上,您可以将 GetLocaleInfo 与 LOCALE_SNATIVEDIGITS 结合使用。
- 在 Mac 上,CFNumberFormatterCopyProperty 带有 kCFNumberFormatterZeroSymbol。
- 或者使用类似的东西 重症监护室.
有些阿拉伯国家/地区默认不使用阿拉伯-印度数字。因此,没有直接映射阿拉伯语 -> 阿拉伯语-印度语数字。
无论如何,用户可能已经更改了控制面板中的默认设置。
你喜欢哪个码用于表示数字4,U + 0664或U + 06F4?
(4或4)?
要一致,让这个选择指南使用1,2,和其他重复码,其编码
不隶属于 StackOverflow