2010-01-02 36 views
4

Je travaille avec C# .NetLa meilleure façon de décoder la séquence hexadécimale de caractères unicode à chaîne

Je voudrais savoir comment convertir une chaîne de forme Unicode comme « \ u1D0EC » (notez qu'il est au-dessus " \ uFFFF ") à son symbole ..." "

Merci d'avance !!!

+0

La valeur maximale Unicode n'est-elle pas uniquement FFFF? Quelle est la signification de Unicode 1D0EC? –

+0

la solution la plus proche que j'ai trouvé était celui-ci: http://stackoverflow.com/questions/1615559/converting-unicode-strings-to-escaped-ascii-string mais il a travaillé seulement pour ci-dessous unicode "\ uFFFF " – Jack

+0

Que voulez-vous dire à son symbole? Pendant l'affichage, le symbole est mappé à sa représentation visuelle. Voulez-vous convertir en UTF8? à un encodage particulier? Joel Spolsky a un bon article sur Unicode - c'est déroutant. –

Répondre

7

Ce code codé Unicode est codé en UTF32. .NET et Windows encodent Unicode en UTF16, vous devrez traduire. UTF16 utilise des "paires de substitution" pour gérer les points de code au-dessus de 0xffff, une approche similaire à UTF8. Le premier code de la paire est 0xd800..dbff, le second code est 0xdc00..dfff. Essayez cet exemple de code pour voir que au travail:

using System; 
using System.Text; 

class Program { 
    static void Main(string[] args) { 
    uint utf32 = uint.Parse("1D0EC", System.Globalization.NumberStyles.HexNumber); 
    string s = Encoding.UTF32.GetString(BitConverter.GetBytes(utf32)); 
    foreach (char c in s.ToCharArray()) { 
     Console.WriteLine("{0:X}", (uint)c); 
    } 
    Console.ReadLine(); 
    } 
} 
+0

merci - Great !!! beaucoup aidé! – Jack

1

J'ai récemment pousser mon logiciel libre Décoder Converter à Codeplex (http://unicode.codeplex.com)

vous

peut convertir tout ce que vous voulez en code hexadécimal et de code hexadécimal pour obtenir le bon caractère, il y a aussi une base de données complète de caractères d'information.

J'utilise ce code

public static char ConvertHexToUnicode(string hexCode) 
    { 
     if (hexCode != string.Empty) 
      return ((char)int.Parse(hexCode, NumberStyles.AllowHexSpecifier)); 

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

vous pouvez voir le code entier sur la http://unicode.codeplex.com/

0

Il semble que vous voulez juste dans votre code ... vous pouvez taper comme une chaîne littérale en utilisant l'évasion code \Uxxxxxxxx (notez qu'il s'agit d'un capitale U, et il doit être 8 chiffres). Pour cet exemple, ce serait: "\U0001D0EC".