Unicode代理字符编码c#

时间:2011-03-06 22:44:38

标签: c# unicode encoding decoding

我遇到了Unicode字符的问题。当我想编码代理字符(D800DFFF之间)时,它编码为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 个答案:

答案 0 :(得分:4)

 string unicodeChars="a\uD800\uD565";

这是gigo,Garbage In,Garbage Out的案例。代理无效,第二个必须在\ uDC00 .. \ uDFFF范围内。