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

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

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

Ответы на вопрос(3)

вы не должны жестко кодировать такую информацию в своем приложении.

В Windows вы можете использовать GetLocaleInfo с LOCALE_SNATIVEDIGITS.На Mac CFNumberFormatterCopyProperty с kCFNumberFormatterZeroSymbol.Или используйте что-то вродеICU.

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

И пользователь мог изменить настройки по умолчанию в панели управления в любом случае.

Решение Вопроса

кодовые диаграммы, U + 0660 .. U + 0669 - это значения ARABIC-INDIC DIGIT от 0 до 9, в то время как U + 06F0 .. U + 06F9 - это значения расширенного ARABIC-INDIC DIGIT от 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, вы должны принять любой набор кодов в качестве допустимых цифр (но вы можете косо взглянуть на последовательность, которая смешала два набора цифр - или вы могли бы просто оставить в покое).

 Arthur Reutenauer04 нояб. 2009 г., 22:06
+1: сделал бы этот ответ, если бы ты небить меня на 1 минуту ;-)Жаль, что все, кажется, думают, что разница нене имеет значения и спешить, чтобы сделать опрометчивые ответы ...
 BalusC04 нояб. 2009 г., 22:34
+1: узнал что-то новое.
 user363847120 мая 2016 г., 08:48
Да, урду почти всегда использует 5 в форме сердца, а не круглую ... Лучше всего было бы нормализоваться в вашей собственной программе (если выповторный разбор). Может бытьДля этого есть большая свобода. Но опять же, кто будет писать эти символы с клавишным ключом, вне меня, может быть, тамЭто механизм для этого.
 Dwayne14 янв. 2016 г., 16:14
Примерно это означает, что они никогда не должны были иметь две кодовые точки. Тот факт, что они выглядят по-разному на трех разных языках, является проблемой шрифта и не долженt были закодированы в сценарии. Есть несколько подобных проблем с символами урду, закодированными в разных точках, потому что они выглядят по-разному, даже если они имеют одну и ту же букву. Таким образом, правильным решением был бы шрифт для отображения символа по-разному, если он на арабском языке или на языке урду. Радости Unicode изучения арабского алфавита.
 Jonathan Leffler14 янв. 2016 г., 16:31
@Dwayne: да, нет, может быть. Я могу видеть этот аргумент, но тогда почему они не перенаправили кодовые точки U + 0030..U + 0039 и сказали, что в арабских шрифтах они должны отображаться в виде арабских цифр. Там, вероятно, были достаточно веские причины для решения - даже если бы не былот, этоS состояние стандарта. Обратите внимание, что формы представления арабских букв теперь в приложениях. Арабский диапазон: арабский в U + 0600..U + 06FF; Арабская добавка в U + 0750..U + 077F; Арабский Extended-A в U + 08A0..U + 08FF; Арабские формы представления-A на U + FB50..U + FDFF; и арабские формы представления-B в U + FE70..U + FEFF.

U + 0664 или U + 06F4? (٤

 или ۴ )?

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

Ваш ответ на вопрос