Лучший способ декодирования шестнадцатеричной последовательности символов Юникода в строку
Вопрос
Я работаю с C # .Net
Я хотел бы знать, как преобразовать строку формы Unicode, такую как "\ u1D0EC" (обратите внимание, что она находится выше "\uFFFF"), в ее символ..."𝃬"
Спасибо За Аванс!!!
Решение
Эта кодовая точка 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();
}
}
Другие советы
Преобразуйте каждую последовательность с помощью int.Parse(String, NumberStyles)
и char.ConvertFromUtf32
:
string s = @"\U1D0EC";
string converted = char.ConvertFromUtf32(int.Parse(s.Substring(2), NumberStyles.HexNumber));
Недавно я запустил свой конвертер 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/
Похоже, вы просто хотите, чтобы это было в вашем коде...вы можете ввести его как строковый литерал, используя escape-код \Uxxxxxxxx
(обратите внимание, что это капитал U, и там должен должно состоять из 8 цифр).Для этого примера это было бы: "\U0001D0EC"
.