2010-01-02 2 views
4

Я работаю с C# .NetЛучший способ для декодирования шестигранную последовательность символов Юникода в строку

Я хотел бы знать, как преобразовать форму строки Unicode, как «\ u1D0EC» (заметим, что это выше " \ uFFFF ") к его символу ..." "

Спасибо за аванс !!!

+0

Не является максимальным значением unicode только FFFF? В чем смысл unicode 1D0EC? –

+0

ближайшим решением, которое я нашел, был этот: http://stackoverflow.com/questions/1615559/converting-unicode-strings-to-escaped-ascii-string , но он работал только под юникодом "\ uFFFF " – Jack

+0

Что вы имеете в виду под его символом? Во время отображения символ преобразуется в его визуальное представление. Вы хотите конвертировать в UTF8? к определенной кодировке? У Джоэла Спольского есть хорошая статья о Юникоде - это сбивает с толку. –

ответ

7

Этот код кодировки Unicode кодируется в UTF32. .NET и Windows кодируют Unicode в UTF16, вам придется переводить. UTF16 использует «суррогатные пары» для обработки кодовых точек выше 0xffff, аналогичный подход, такой как UTF8. Первый код пары - 0xd800..dbff, второй код - 0xdc00..dfff. Попробуйте этот пример кода, чтобы увидеть, что на работе:

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

спасибо - Отлично !!! помогли! – Jack

1

Я недавно раздвигать FOSS Uncode конвертер на Codeplex (http://unicode.codeplex.com)

вам может преобразовать все, что вы хотите, в шестнадцатеричный код и из шестнадцатеричного кода, чтобы получить правильный символ, также есть полная база данных символов.

Я использую этот код

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

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

вы можете увидеть весь код на http://unicode.codeplex.com/

0

Похоже, вы просто хотите, чтобы это в вашем коде ... вы можете ввести его в качестве строкового литерала, используя побег код \Uxxxxxxxx (обратите внимание, что это капитал U, а там должен быть 8 цифр). Для этого примера это будет: "\U0001D0EC".

 Смежные вопросы

  • Нет связанных вопросов^_^