2010-01-22 3 views
1

J'ai une application C# où je stocke la valeur de point de code d'un caractère Unicode à afficher lorsque l'utilisateur correspond correctement à une chaîne spécifique normale. Le fait est que lorsque je stocke la valeur du point de code directement (par exemple, \ uFB80) l'application fonctionne bien. Mais quand je lis d'un fichier ou d'une variable qui a seulement le point de code (dans ce cas FB80), je reçois beaucoup de caractères rendus incorrectement. Si vous modifiez la valeur stockée dans \ uFB80 ou si vous essayez d'ajouter un "\ u" devant la valeur, le système la lit comme \ uFB80, ce qui se traduit par un autre mauvais résultat.Rendu Unicode dans C#

Quel est le moyen de contourner cela?

XmlTextReader reader = new XmlTextReader("file.xml"); 
reader.Read(); 
reader.MoveToAttribute("glyph"); 

glyph = reader.Value; 
// glyph will be "FB80" 
// if xml file had "\uFB80", glyph will be "\\uFB80" 

richTextBox1.SelectionFont = "QCF_P604"; 
richTextBox1.AppendText(glyph); 
+0

Pouvez-vous afficher la façon dont vous lisez et le stockage de la valeur à afficher? –

+1

Veuillez éditer votre question et ajoutez-y votre code. C'est difficile à lire dans un commentaire. –

Répondre

0

cher Jalal, comme je l'underestand Vous avez une chaîne (dans le fichier ou dans une zone de texte) lorsque vous analysez la chaîne du tout Box va bien mais quand vous essayez de lire à partir d'un fichier que vous faites face à des problème.

Vous avez un document XML dans lequel vous avez stroré le glyphe de caractères. et chaque élément de ce XML (par exemple: Item) a un attribut comme Glyph. (la forme du caractère)

Si vous souhaitez uniquement afficher la forme du caractère Vous êtes dans le mauvais sens. la seule chose que vous devriez faire est d'écrire une méthode simple qui donne une valeur décimale (ou hexadécimale) de caractère et retourne le caractère.

Le caractère retourné s'affichera partout comme un seul caractère. donc je vous recommande vivement de changer la méthode (cela vous permettra d'accélérer votre application).

// het a hex and return char (you can give it a large string or a single hexcode 
// (hex without U just HexCode) 
public static char ConvertHexToUnicode(string hexCode) 
    { 
     if (hexCode != string.Empty) 
      return ((char)int.Parse(hexCode, NumberStyles.AllowHexSpecifier)); 

     char empty = new char(); 
     return empty; 
    }//end 

et valeur décimale utilisez le code suivant

public static char ConvertDecimalToChar(Int64 decimalValue) 
    { 
     return ((char)int.Parse(decimalValue.ToString(), NumberStyles.Integer)); 
    } 
+0

J'ai utilisé la version hexagonale et cela a fonctionné comme un charme !! Merci beaucoup Nasser. –