문제

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) -CodePage 65001"이외의 인코딩을 사용하는 이유를 알 수 없습니다 (아마도 비 라틴어 정적 콘텐츠가있는 ASPX 페이지 제외하지만 심지어는 할 수 있습니다. t UTF-8을 사용하는 것이 얼마나 큰 문제인지보십시오).

여전히 혼합 인코딩을 허용한다고 가정하면 다음에 파일을 인코딩하는 인코딩을 결정하는 방법이 필요하므로 전달할 인코딩을 알 수 있습니다. ReadAllText. 파일에서 이것을 결정하는 것은 쉽지 않습니다. Encoding.Default 잘 작동 할 가능성이 높습니다. 처리 할 인코딩 2 개, VS (서명이있는 UTF-8) 및 귀하의 기계에서 사용하는 일반적인 ANSI 인코딩 (아마도 Windows-1252)이 있습니다.

따라서 사용합니다

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

작동합니다. (내가 본 것처럼 Jon이 이미 게시되었습니다). 이것은 UTF-8 BOM ( "서명"이라는 용어가 의미하는 바임)이 파일 시작시 존재 할 때 제공된 인코딩 매개 변수가 무시되고 UTF-8이 사용되기 때문에 작동합니다. 따라서 UTF-8을 사용하여 파일을 저장하는 경우 올바른 결과를 얻을 수 있으며 ANSI가 사용되는 경우 올바른 결과를 얻을 수 있습니다.

BTW 파일 헤더를 처리하는 경우에는 그렇지 않습니다 ReadAllLines 일을 더 쉽게 만들 수 있습니까?.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top