Почему в Unicode существует два представления арабских цифр?
Вопрос
Я читал спецификацию Unicode @ Wikipedia (Арабский Юникод) и я вижу, что каждая из арабских цифр имеет 2 кодовые точки в Юникоде.Например, 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:۰۱۲۳۴۵۶۷۸۹
Или расширить, превратив информацию в заголовок:
U+066n:٠١٢٣٤٥٦٧٨٩
U+06Fn:۰۱۲۳۴۵۶۷۸۹
Или:
U+066n U+06Fn
0 ٠ ۰
1 ١ ۱
2 ٢ ۲
3 ٣ ۳
4 ٤ ۴
5 ٥ ۵
6 ٦ ۶
7 ٧ ۷
8 ٨ ۸
9 ٩ ۹
(Видите ли вы что-либо из этого и насколько четко они различаются, может зависеть от вашего браузера и шрифтов, установленных на вашем компьютере, как и от всего остального.Я ясно вижу разницу на 4 и 6;5 выглядит практически одинаково в обоих случаях.)
Исходя из этой информации, если вы работаете с арабским языком Ближнего Востока, используйте серию цифр U +066n;если вы работаете с персидским или урду, используйте серию цифр U +06Fn.Как приложение Unicode, вы должны принимать любой набор кодов в качестве допустимых цифр (но вы можете искоса взглянуть на последовательность, в которой смешаны два набора цифр - или вы можете просто оставить well в покое).
Другие советы
Как правило, вам не следует жестко кодировать такую информацию в своем приложении.
- В Windows вы можете использовать GetLocaleInfo с LOCALE_SNATIVEDIGITS .
- В Mac CFNumberFormatterCopyProperty используется синоним kCFNumberFormatterZeroSymbol.
- Или используйте что-то вроде Отделение интенсивной терапии.
Есть арабские страны, которые по умолчанию не используют арабоиндийские цифры.Таким образом, нет прямого сопоставления с арабскими -> арабско-индическими цифрами.
И пользователь, возможно, все равно изменил настройки по умолчанию на панели управления.
Какой код вы предпочитаете для представления числа 4, U + 0664 или U + 06F4?
(٤ или ۴ )?
Чтобы быть последовательным, позвольте этому выбору указывать, какие коды вы используете для 1, 2 и других повторяющихся кодов.