아래 그림은 모두 설명 :C# : 콘솔에서 문자가 잘 표시되지 않는 이유는 무엇입니까?
alt text http://img133.imageshack.us/img133/4206/accentar9.png
변수에서 textInput는 File.ReadAllText(path);
에서 유래와 같은 문자 'é è이 ... 표시되지 않습니다. UnitTest를 실행할 때 모두 괜찮습니다! 나는 그들을 본다. .. 왜?
아래 그림은 모두 설명 :C# : 콘솔에서 문자가 잘 표시되지 않는 이유는 무엇입니까?
alt text http://img133.imageshack.us/img133/4206/accentar9.png
변수에서 textInput는 File.ReadAllText(path);
에서 유래와 같은 문자 'é è이 ... 표시되지 않습니다. UnitTest를 실행할 때 모두 괜찮습니다! 나는 그들을 본다. .. 왜?
NUnit과 함께 작동하는 이유는 모르겠지만, NotePad ++로 파일을 열면 ANSI 형식으로 표시됩니다. 이제는 UTF-8로 변환되어 작동합니다.
아직도 콘솔에서 NUnit으로 작동하는 이유가 궁금합니다. 적어도 지금은 작동합니다.
나는 콘솔에서 내가 ANSI 파일을 읽을 수없는 이유를 질문은 여전히 유효하기 때문에 아래 질문에이 질문에 대해 투표를 얻을 이유를 얻을 수 있지만, 내가 할 수있는 NUNIT에없는 업데이트?
.NET 클래스 (System.IO.StreamReader
등)는 기본 인코딩으로 UTF-8을 사용합니다. 다른 인코딩을 읽고 싶다면이를 명시 적으로 적절한 생성자 오버로드에 전달해야합니다.
또한 "ANSI"라는 단일 인코딩이 없습니다. 아마도 Windows 코드 페이지 1252 (일명 "서유럽")을 언급했을 것입니다. 다른 국가의 Windows 기본 인코딩과 다릅니다. 이것은 System.Text.Encoding.Default
을 사용하려고 할 때 실제로 시스템마다 다르므로 관련이 있습니다.
/편집 :
그래서, 결국 :
string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));
여기서 중요한 부분은 적절한 System.Text.Encoding
인스턴스의 사용이다 : 당신의 문제에 대한 해결책은 다음 코드해야합니다.
그러나 이것은 인코딩이 실제로 Windows-1252 인 것으로 가정합니다 (그러나 나는 Notepad ++가 "ANSI"를 의미하는 것으로 생각합니다). NUnit이 읽을 때 텍스트가 올바르게 표시되는 이유를 모르겠습니다. NUnit에는 텍스트 인코딩을위한 자동 검색 기능이 있거나 NUnit에서 이상한 기본값 (즉, UTF-8이 아님)을 사용한다고 가정합니다.
아, 그런데 : "ANSI"는 실제로 "미국 표준 협회"를 나타냅니다. 그들의 이름의 일부로 "ANSI"를 가진 완전히 다른 표준이 많이 있습니다. 예를 들어, C++은 ANSI 표준 (다른 것들도 포함)입니다.
일부 컨텍스트에서는 Windows 인코딩을 참조하는 데 부정확하게 사용됩니다. 그러나 거기에서도 내가 설명하려고했듯이 일반적으로 특정 인코딩을 나타내지 않고 Windows가 다른 국가의 기본값으로 사용하는 인코딩 클래스를 나타냅니다. 이 중 하나는 Windows-1252입니다.
Notsad ++의 Ansi 형식 : http://img359.imageshack.us/img359/9194/ansinz4.png 위키에서 : http://en.wikipedia.org/wiki/ASCII 및 http : //en.wikipedia .org/wiki/ANSI_escape_code –
이러한 링크가 모두 참조하는 사실 외에도 첫 번째 그림 (Notepad ++ 표시)은 컨텍스트에서 단어의 부정확 한 사용입니다. 아마 여기에서 의미하는 바는 .Net의'Default' 인코딩, 즉 특정 인코딩이 아닌 현재 시스템의 기본 코드 페이지와 동일합니다. –
Notepad ++가 UTF8이 아니 었음을 보여줍니다 ... 그리고 많은 소스에서 거짓 일 때 ANSI가 존재하지 않는다고 말해줍니다. 나는 내 연구를했고 당신을해야합니다. 하지만 아직도 날 이해 못 하겠니? 나는 당신이하는 모든 것을 이해해야하는 인코딩 마스터가 아닙니다. A –
원래 질문에 정보를 추가하는 동안 응답을 추가하지 마십시오. 단순히 원래 질문을 편집하십시오. 그것은 downvote (들)의 일부를 설명 할 수 있습니다. – Tanktalus
내가 downvoted하기 전에 나는 정보를 추가하지 않았습니다. 내가 게시 한 정보가 새로 발견되었습니다. –