2017-05-19 23 views
0

私は私が読んでい.NETのStreamReaderエンコードの行動

StreamWriter(fileName,false, Encoding.Unicode); 

を使用してEncoding.Unicodeを使って、文字列をファイルに書いていますUnicodeエンコーディングの挙動を理解しようとすると、以下に出くわし、

ています意図的にASCIIを使用します。

ReadLineを使用して文字列を読むと、驚いたことに同じユニコード文字列が返されます。

文字列が含まれると予想しましたか?または元の文字列の長さの2倍の文字を使用します。

ここで何が起こっているか

コードスニペット

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を(ファイル名、エンコーディング、false)を呼び出した場合。 はそれは期待result.`に

おかげ

+0

入力はすでに文字マップからコピーされたユニコードのアラビア文字です。私はそれが私が通過しているパラメータに起因することが分かった。ありがとう – HAN

+0

[この回答を読んでください(http://stackoverflow.com/a/700221/2846483)。 Unicodeは実際にはエンコーディングではなく、ASCIIであることに注意してください。 – dymanoid

+2

@dymanoid in .NET、 "Encoding.Unicode" _エンコード、つまり[UTF-16リトルエンディアン](https://msdn.microsoft.com/en-us/library/system.text.encoding.unicode( v = .110).aspx)。私はその命名に同意すると言っていません。 – CodeCaster

答えて

0

StreamReaderオブジェクトを作成する場合はfalseに設定する必要があり、パラメータdetectEncodingFromByteOrderMarksを与えます。

関連する問題