In Unicode, perché ci sono due rappresentazioni per le cifre arabe?
Domanda
Stavo leggendo la specificazione di Unicode @ Wikipedia ( arabo Unicode ) e vedo che ciascuna delle cifre arabe ha 2 punti di codice Unicode. Ad esempio 1 è definito come U + 0661 e come U + 06F1.
Quale dovrei usare?
Soluzione
Secondo il classifiche codice , U + 0660 .. U + 0669 sono DIGIT arabo e indi, valori da 0 a 9, mentre U + 06F0 .. U + 06F9 sono estese valori digitali arabo e indi 0 a 9.
Nel libro 3.0 Unicode (5.2 è la versione corrente, ma queste cose non cambiano molto previa programmazione), l'U + 066n serie di glifi sono contrassegnati 'cifre arabo e indi,' e la serie U + 06Fn di glifi sono contrassegnati 'orientali cifre arabo-indiane (persiano e urdu)'. Si rileva inoltre:
- U + 06F4 - 'diversi glifi in persiano e l'urdu'
- U + 06F5 - 'persiano e l'urdu quota glifo diversa dall'arabo'
- U + 06F6 - 'glifo persiano diversa dall'arabo'
- U + 06F7 - 'Urdu glifo diversa dall'arabo'
Per fare un confronto:
- U + 066n: 0123456789
- U + 06Fn: 0123456789
In alternativa, ampliata facendo le informazioni in un titolo:
U + 066n: 0123456789
U + 06Fn: 0123456789
o
U+066n U+06Fn
0 ٠ ۰
1 ١ ۱
2 ٢ ۲
3 ٣ ۳
4 ٤ ۴
5 ٥ ۵
6 ٦ ۶
7 ٧ ۷
8 ٨ ۸
9 ٩ ۹
(Se è possibile vedere una di queste, e come chiaramente si differenziano può dipendere dal vostro browser e i font installati sul computer tanto quanto qualsiasi altra cosa che può vedere la differenza il 4 e 6 in modo chiaro;. 5 sembra molto lo stesso in entrambi.)
In base a queste informazioni, se si sta lavorando con l'arabo dal Medio Oriente, utilizzare la U + 066n serie di cifre; se si sta lavorando con l'urdu persiano o, utilizzare la serie U + 06Fn di cifre. Come applicazione Unicode, è necessario accettare entrambi i set di codici di cifre come validi (ma si potrebbe guardare di traverso una sequenza che mescola le due serie di cifre - o si potrebbe lasciare bene da solo).
Altri suggerimenti
In generale non si deve hard-code, quali informazioni nell'applicazione.
- Su Windows è possibile utilizzare GetLocaleInfo con LOCALE_SNATIVEDIGITS.
- Su Mac CFNumberFormatterCopyProperty con kCFNumberFormatterZeroSymbol.
- O usare qualcosa come ICU .
Ci sono paesi arabi che non utilizzano le cifre arabo e indi, per impostazione predefinita. Quindi non v'è alcuna mappatura diretta dicendo Arabo -.> Cifre arabo e indi,
E l'utente potrebbe aver cambiato le impostazioni di default nel pannello di controllo in ogni caso.
Quale codice preferisci per rappresentare il numero 4, U + 0664 o U + 06F4?
(4 o 4)?
Per essere coerenti, lasciare che questa guida scelta che codifica utilizzato per 1, 2, e gli altri codici duplicati.