Em Unicode, por que existem duas representações para os dígitos árabes?

StackOverflow https://stackoverflow.com/questions/1676460

  •  16-09-2019
  •  | 
  •  

Pergunta

Eu estava lendo a especificação do Unicode @ Wikipedia ( Árabe Unicode ) e vejo que cada um dos dígitos árabes tem 2 pontos de código Unicode. Por exemplo um é definido como L + 0661 e como L + 06F1.

Qual deles devo usar?

Foi útil?

Solução

De acordo com a gráficos de código , U + 0660 .. U + 0669 são DIGIT ÁRABE-índicos valores de 0 a 9, enquanto L + 06F0 .. U + 06F9 são estendidos valores DIGIT árabe-INDIC de 0 a 9.

No 3.0 livro Unicode (5.2 é a versão atual, mas essas coisas não mudam muito, uma vez set), os + 066n série U de glifos são marcadas 'dígitos Árabe-índicos' e da série U + 06Fn de glifos 'dígitos Oriental Árabe-índicos (persa e urdu)' estão marcados. Ele também observa:

  • U + 06F4 - 'diferentes glifos em persa e urdu'
  • U + 06F5 - 'persa e urdu share glifo diferente do árabe'
  • U + 06F6 - 'diferente glifo persa do árabe'
  • U + 06F7 - 'diferente Urdu glifo do árabe'

Para comparação:

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

Ou, ampliado, tornando a informação em um título:

U + 066n: 0123456789

U + 06Fn: 0123456789

Ou:

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

(Se você pode ver qualquer um desses, e quão claramente eles são diferenciados pode depender de seu navegador e as fontes instalado em sua máquina, tanto quanto qualquer outra coisa que eu posso ver a diferença nos dias 4 e 6 claramente;. 5 parece muito o mesmo em ambos.)

Com base nessas informações, se você estiver trabalhando com o árabe do Oriente Médio, use + 066n série U de dígitos; se você estiver trabalhando com persa ou urdu, usar a série U + 06Fn de dígitos. Como um aplicativo Unicode, você deve aceitar qualquer conjunto de códigos como dígitos válidos (mas você pode olhar de soslaio para uma sequência que misturou os dois conjuntos de dígitos - ou você pode simplesmente deixar bem sozinho).

Outras dicas

Em geral, você não deve codificar tais informações em sua aplicação.

  • No Windows, você pode usar GetLocaleInfo com LOCALE_SNATIVEDIGITS.
  • No Mac CFNumberFormatterCopyProperty com kCFNumberFormatterZeroSymbol.
  • ou usar algo como UTI .

Há países árabes que não utilizam os dígitos Árabe-índicos por padrão. Portanto, não há mapeamento direto dizendo Árabe -.> Dígitos Árabe-índicos

E o usuário pode ter alterado os padrões no Painel de controle de qualquer maneira.

Qual código você prefere para representar o número 4, U + 0664 ou U + 06F4?

(4 ou 4)?

Para ser coerente, que este guia de escolha quais os códigos que você usa para 1, 2, e os outros códigos duplicados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top