2017-05-19 77 views
0

我想了解Unicode編碼的行爲和整個下面就來,.NET StreamReader的編碼行爲

使用Encoding.Unicode使用

StreamWriter(fileName,false, Encoding.Unicode); 

我讀我寫一個文件中的字符串從相同的文件,但有意使用ASCII。

StreamReader(fileName,false, Encoding.ASCII); 

當我使用ReadLine讀取字符串令我驚訝的是它給出了相同的Unicode字符串。

我希望字符串包含?或其他字符的長度是原始字符串的兩倍。

這裏發生了什麼?

代碼段

string test= "سشصضطظع";//some random arabic set 
StreamWriter s = new StreamWriter(fileName,false, Encoding.UTF8); 
s.Write(input); 
s.Flush(); 
s.Close(); 
StreamReader s = new StreamReader(fileName, encoding); 
string ss = s.ReadLine(); 
s.Close(); 
//In string ss I expect to be a ascii with Double the length of test 

如果我請StreamReader的S =新的StreamReader(文件名,編碼,假); 那麼它給人的預期result.`

感謝

+0

輸入已經是從字符映射覆制的Unicode字符。我發現這是由於我傳遞的參數。謝謝 – HAN

+0

請閱讀[這個答案](http://stackoverflow.com/a/700221/2846483)。你會注意到,'ASCII'實際上不是編碼。 – dymanoid

+2

.NET中的@dymanoid,「Encoding.Unicode」_is_是一種編碼,即[UTF-16 little-endian](https://msdn.microsoft.com/en-us/library/system.text.encoding.unicode( v = vs.110)的.aspx)。不是說我同意命名。 – CodeCaster

回答

0

參數detectEncodingFromByteOrderMarks應該在創建StreamReader對象時,可以設置爲false。