Nice programing

특수 문자가 포함 된 ANSI 인코딩 파일을 읽는 방법

nicepro 2020. 12. 7. 20:38
반응형

특수 문자가 포함 된 ANSI 인코딩 파일을 읽는 방법


소스 파일에 파일 헤더가 포함되어 있는지 확인하는 TFS 체크인 정책을 작성 중입니다.

내 문제는 파일 헤더에 특수 문자 "©"가 포함되어 있고 안타깝게도 일부 소스 파일이 ANSI로 인코딩되어 있다는 것입니다. 따라서 정책에서 이러한 파일을 읽으면 문자열은 "Copyright 2009"와 같이 표시됩니다.

string content = File.ReadAllText(pendingChange.LocalItem);

문자열 인코딩을 변경하는 데 지 쳤지 만 도움이되지 않습니다. 그렇다면 올바른 문자열 "Copyright © 2009"를 얻기 위해이 파일을 어떻게 읽을 수 있습니까?

도움에 감사드립니다!

Eny 감사합니다


사용 Encoding.Default:

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

그러나 시스템 기본 인코딩을 사용하여 읽는다는 점에 유의해야합니다. 이는 파일의 인코딩과 동일하지 않을 수 있습니다. ANSI라는 단일 인코딩은 없지만 일반적으로 사람들이 "ANSI 인코딩"에 대해 이야기 할 때 Windows 코드 페이지 1252 또는 해당 상자에서 사용하는 모든 것을 의미합니다.

사용 된 정확한 인코딩을 찾을 수 있으면 코드가 더 강력 해집니다 .


팀이 표준 인코딩에 동의하도록 정책을 적용하는 것이 합리적입니다. 솔직히 말해서 어떤 팀이 "유니 코드 (서명이있는 UtF-8)-코드 페이지 65001"이외의 인코딩을 사용하는 이유를 알 수 없습니다 (중요한 비 라틴 정적 콘텐츠가 포함 된 ASPX 페이지는 제외하지만 그래도 가능합니다. UTF-8을 사용하는 것이 얼마나 큰 일인지 확인하십시오).

여전히 혼합 인코딩을 허용하고 싶다고 가정하면 다음에 어떤 인코딩으로 전달할지 알 수 있도록 파일이 저장된 인코딩을 결정하는 방법이 필요합니다 ReadAllText. 파일에서 이것을 결정하는 것은 쉽지 않지만 사용하면 정상적으로 Encoding.Default작동합니다. 처리 할 인코딩은 VS (서명이있는 UTF-8)와 컴퓨터에서 사용하는 일반적인 ANSI 인코딩 (아마도 Windows-1252)뿐입니다.

따라서

 string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

작동합니다. (내가보기에 Jon은 이미 게시했습니다). 이는 UTF-8 BOM (VS가 "서명"이라는 용어로 의미하는 것)이 파일 시작 부분에있을 때 제공된 인코딩 매개 변수가 무시되고 어쨌든 UTF-8이 사용되기 때문에 작동합니다. 따라서 파일이 UTF-8을 사용하여 저장되면 올바른 결과를 얻고 ANSI가 사용되는 곳에서도 올바른 결과를 얻을 수 있습니다.

BTW 파일 헤더를 처리하는 경우 ReadAllLines작업이 더 쉬워지지 않습니까?.

참고 URL : https://stackoverflow.com/questions/1432064/how-to-read-an-ansi-encoded-file-tained-special-characters

반응형