2017-05-19 10 views
0

내가 유니 코드 인코딩의 행동을 이해하려고 노력하고 다음을 가로 질러 온하고,.NET에서는 StreamReader 인코딩 동작

내가 읽고있다

StreamWriter(fileName,false, Encoding.Unicode); 

를 사용하여 Encoding.Unicode를 사용하여 파일에 문자열을 쓰고 있어요 동일한 파일에서 가져 오지만 의도적으로 ASCII를 사용하십시오.

StreamReader(fileName,false, Encoding.ASCII); 

나는이 같은 유니 코드 문자열을 돌려주고있다 놀랍게도에서는 ReadLine를 사용하여 문자열을 읽을 때.

문자열에 포함 할 것으로 예상 했습니까? 또는 원래 문자열 길이의 두 배가되는 다른 문자.

여기 무슨 일입니까?

코드 조각

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 

내가 (파일 이름, 인코딩 false)를 위해 StreamReader의 = 새에서는 StreamReader 호출하는 경우

; 다음은 예상 result.`에게

감사

+0

입력이 이미 문자표에서 복사 된 유니 코드 문자입니다. 나는 그것이 통과하고있는 매개 변수 때문인 것으로 나타났습니다. 감사합니다 – HAN

+0

[이 답변을 읽어 보시기 바랍니다 (http://stackoverflow.com/a/700221/2846483). 'Unicode'는 실제로는 인코딩이 아니고'ASCII'는 사실입니다. – dymanoid

+2

@dymanoid in .NET, "Encoding.Unicode"_ 인코딩, 즉 [UTF-16 little-endian] (https://msdn.microsoft.com/en-us/library/system.text.encoding.unicode (v = .110) .aspx). 나는 그 명명법에 동의하지 않는다. – CodeCaster

답변

0

StreamReader 개체를 만들 때 false로 설정해야 매개 변수 detectEncodingFromByteOrderMarks을 제공합니다.