2011-03-06 109 views
2

我有Unicode字符的問題。當我想編碼替代字符(在D800DFFF之間)時,它編碼爲FFFD。我用Encoding.Unicode.GetString()方法它不起作用Decoder.GetChars()方法它不適用於每個替代字符Unicode替代字符編碼c#

我使用以下代碼:

編碼代碼:

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

[Hans Passant](http://stackoverflow.com/users/17034/hans-passant)是正確的。您的值D800,DA65無效,因爲DA65不在範圍內。第二個值需要在DC00和DFFF之間。 – 2011-03-07 00:27:59

回答

4
string unicodeChars="a\uD800\uD565"; 

這是gigo,垃圾進入,垃​​圾出的情況。代理無效,第二個必須在\ uDC00 .. \ uDFFF範圍內。