В 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).