In Unicode, perché ci sono due rappresentazioni per le cifre arabe?

Stavo leggendo le specifiche di Unicode @ Wikipedia ( Arabic 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?

Secondo le tabelle di codici , U + 0660 .. U + 0669 sono valori di ARABO-INDIC DIGIT da 0 a 9, mentre U + 06F0 .. U + 06F9 sono valori di ESTATE ARABO-INDICATI da 0 a 9.

Nel libro Unicode 3.0 (la versione 5.2 è la versione corrente, ma queste cose non cambiano molto una volta impostata), la serie di glifi U + 066n è contrassegnata con “cifre indicanti l’arabo” e la serie di glifi U + 06Fn è contrassegnata ” Cifre orientali a caratteri arabi (persiano e urdu) ». Inoltre nota:

  • U + 06F4 – “diversi glifi in persiano e urdu”
  • U + 06F5 – ‘Persiano e urdu condividono il glifo diverso dall’arabo’
  • U + 06F6 – ‘Glifo persiano diverso dall’arabo’
  • U + 06F7 – ‘Glifo urdu diverso dall’arabo’

Per confronto:

  • U + 066n: 0123456789
  • U + 06 Fn: 0123456789

O, ingrandito rendendo le informazioni in un titolo:

U + 066n: 0123456789

U + 06 Fn: 0123456789

O:

U+066n U+06Fn 0 ٠ ۰ 1 ١ ۱ 2 ٢ ۲ 3 ٣ ۳ 4 ٤ ۴ 5 ٥ ۵ 6 ٦ ۶ 7 ٧ ۷ 8 ٨ ۸ 9 ٩ ۹ 

(Sia che tu possa vedere qualcuno di questi, e quanto chiaramente siano differenziati può dipendere dal tuo browser e dai font installati sulla tua macchina come qualsiasi altra cosa: posso vedere chiaramente la differenza su 4 e 6, 5 sembra più o meno lo stesso in entrambi.)

Sulla base di queste informazioni, se stai lavorando con l’arabo dal Medio Oriente, usa la serie di cifre U + 066n; se stai lavorando con persiano o urdu, usa la serie di cifre U + 06Fn. Come applicazione Unicode, dovresti accettare entrambi i set di codici come cifre valide (ma potresti sembrare assalito da una sequenza che mescolava i due gruppi di cifre – o potresti lasciarti solo bene).

In generale, non è necessario codificare tali informazioni nella propria applicazione.

  • Su Windows puoi utilizzare GetLocaleInfo con LOCALE_SNATIVEDIGITS.
  • Su Mac CFNumberFormatterCopyProperty con kCFNumberFormatterZeroSymbol.
  • O usare qualcosa come ICU .

Esistono paesi arabi che non utilizzano le cifre dell’indicatore arabo per impostazione predefinita. Quindi non esiste una mapping diretta che dica cifre arabe -> arabe.

E l’utente potrebbe aver comunque modificato i valori predefiniti nel Pannello di controllo.

Quale codice preferisci per rappresentare il numero 4, U + 0664 o U + 06F4?

(4 o 4)?

Per essere coerenti, lascia che questa scelta guidi quali codici usi per 1, 2 e gli altri codici duplicati.

Bene, il tuo aspetto è questo: 1 e 1, quindi presumo che non importi molto. La mia ipotesi sarebbe che hanno codici Unicode diversi per lo stesso numero a seconda della sua posizione. In arabo, fanno lo stesso con le lettere: hanno un aspetto diverso quando sono l’ultima lettera di una parola o se stanno da sole.

Edit: Ho appena notato che i 4 sembrano diversi in entrambi i set: 4 e 4. Sono abbastanza sicuro che in Medio Oriente (Giordania ed Egitto) usano il primo modulo (U-0664).