2010-10-13 13 views
5

En arabe, les caractères sont différents selon l'endroit où ils se trouvent dans un mot. Par exemple, la lettre ta pourrait ressembler à ceci: ث à l'intérieur d'un mot mais ressembler à ceci: ث si elle se tient toute seule. J'ai un texte arabe, par exemple:Comment rendre un caractère Unicode autonome (arabe) comme il le ferait s'il était rendu dans un mot?

string word = والتفويض ; 

Quand je rends word comme un mot entier, il rend correctement. Maintenant, je veux analyser la chaîne et imprimer chaque lettre dans le mot un à la fois. Cependant, si je fais ceci:

foreach(char c in word.ToCharArray()) 
{ 
    Debug.Print(c.ToString()); 
} 

Le char c n'imprime pas la représentation originale de la lettre comme elle a été rendue dans le contexte d'un mot, au lieu il imprime la même lettre arabe comme si elle était rendu par lui-même. Comment puis-je analyser ma chaîne de texte arabe de sorte que les lettres retournées ressemblent à celles affichées en entier?

J'essaye de faire ceci en C#.

Répondre

4

Il existe des caractères dans le SCU qui représentent des formes particulières de caractères arabes. Cependant, ceux-ci ne fonctionnent pas bien en passant d'un contexte à l'autre.

En général, si vous voulez indiquer qu'une lettre est jointe à une autre, quand il n'y a pas de lettre à joindre, vous devez utiliser U + 200D ZERO WIDTH JOINER à l'endroit approprié (avant le caractère pour placer le joiner à droite, après le caractère de la placer à gauche, ou d'avoir un de chaque côté.

A l'inverse, en plaçant U + 200C ZERO WIDTH NON mENUISIER entre les personnages cassera leur adhésion.

juste comment bien que cela fonctionne dans la pratique dépendra du moteur de rendu qui traite les caractères