В Unicode, почему существует два представления для арабских цифр?

Я читал спецификацию Unicode @ Wikipedia (Арабский Юникод) и я вижу, что каждая из арабских цифр и 2 кодовых точек Unicode. Например, 1 определяется как U + 0661 и как U+06F1.

какой из них я должен использовать?

4 ответов


по словам графики - > код, 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 - 'урду глиф отличается от арабского'

Для сравнения:

  • у+066n: ٠١٢٣٤٥٦٧٨٩
  • у+06Fn: ۰۱۲۳۴۵۶۷۸۹

или, увеличенный путем делать информацию в a название:

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

у+06Fn: ۰۱۲۳۴۵۶۷۸۹

или:

     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.
  • или использовать что-то вроде ICU.

есть арабские страны, которые по умолчанию не используют арабско-индийские цифры. Таким образом, нет прямого отображения, говорящего по-арабски - > арабский-Indic десятичные знаки.

и пользователь, возможно, изменил значения по умолчанию на панели управления в любом случае.


какой код вы предпочитаете для представления числа 4, U + 0664 или U+06F4?

(٤ или ۴ )?

чтобы быть последовательным, пусть это руководство по выбору, какие коды вы используете для 1, 2 и других дубликатов кодов.


ну, твой взгляд такой: ١ и ۱, поэтому я предполагаю, что это не имеет большого значения. Я предполагаю, что у них разные коды Unicode для одного и того же числа в зависимости от его местоположения. В арабском языке они делают то же самое с буквами: они выглядят по-разному, когда они являются последней буквой слова или если они стоят отдельно.

Edit: я только что отметил, что 4 выглядят по-разному в обоих наборах: ٤ и ۴. Я совершенно уверен, что на Ближнем Востоке (Иордания и Египет) они используют первую форму (U-0664).