Юникод суррогатная кодировка символов c # - PullRequest
2 голосов
/ 07 марта 2011

У меня проблема с символами Юникода. Когда я хочу кодировать суррогатный символ (от D800 до DFFF), он кодируется как FFFD. Я использовал Encoding.Unicode.GetString() метод он не работает и Decoder.GetChars() метод он не работает с каждым суррогатным символом .

Я использую следующие коды:

Коды кодирования:

string unicodeChars="a\uD800\uDA65";
FileStream stream=new FileStream (@"unicode_encoding.txt",FileMode.Create,FileAccess.Write);
byte[] buffer=Encoding.Unicode.GetBytes(unicodeChars);

stream.Write(buffer,0,buffer.Length);
stream.Close();

Коды декодирования:

string decodedUnicodeChars;
FileStream stream2=new FileStream (@"unicode_encoding.txt",FileMode.Open,FileAccess.Read);
StreamReader reader=new StreamReader(stream2,Encoding.Unicode);

decodedUnicodeChars=reader.ReadToEnd();

foreach(char c in decodedUnicodeChars)
{
   Console.Write("{0} ",Convert.ToInt32(c).ToString("X4"));
}

Вывод:

0061 FFFD FFFD

1 Ответ

4 голосов
/ 07 марта 2011
 string unicodeChars="a\uD800\uD565";

Это случай с Gigo, Garbage In, Garbage Out. Суррогат не действителен, второй должен находиться в диапазоне \ uDC00 .. \ uDFFF.

...