문제

다음과 같은 .NET의 StreamReader 클래스를 사용하고 있습니다.

using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
    string filetext = reader.ReadToEnd();
}

파일에 BOM이있을 때 제대로 작동합니다. 나는 BOM이없는 파일로 문제를 일으켰다. 기본적으로 나는 횡설수설을 받았다. Encoding.unicode를 지정하면 잘 작동했습니다.

using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
    string filetext = reader.ReadToEnd();
}

따라서 파일 내용을 문자열로 가져와야합니다. 그렇다면 사람들은 일반적으로 이것을 어떻게 처리합니까? 나는 시간의 100% 작동하는 솔루션이 없다는 것을 알고 있지만, 내 확률을 향상시키고 싶습니다. 추측하려고하는 소프트웨어가 있습니다 (예 : 메모장, 브라우저 등). .NET 프레임 워크에 나를 추측 할 방법이 있습니까? 누구든지 공유하고 싶은 코드가 있습니까?

더 많은 배경 : 이것 의문 내 것과 거의 동일하지만 .NET Land에 있습니다. 그 질문으로 인해 블로그 목록이 다양한 블로그로 이어졌습니다 인코딩 탐지 라이브러리이지만 .NET에는 없습니다

다른 팁

Raymond Chen 의이 기사를 읽어야합니다. 그는 프로그램이 인코딩이 무엇인지 추측 할 수있는 방법에 대해 자세히 설명합니다.

http://blogs.msdn.com/oldnewthing/archive/2004/03/24/95235.aspx

나는 행운을 빕니다 Pude, ㅏ C# 항구 Mozilla Universal Charset Detector.

UTF-8은 UTF-8을 사용하여 Latin1과 같은 임의의 8 비트 인코딩에서 텍스트를 인코딩 할 가능성이 낮은 방식으로 설계되었습니다.

따라서 최소한의 접근 방식은 이것입니다 (Pseudocode, 나는 .net을 말하지 않습니다) :

try : u = some_text.decode ( "utf-8")는 unicodedecodeerror를 제외하고 : u = some_text.decode ( "Most-Like-Encoding")

가장 많이 인코딩하는 경우 일반적으로 EG Latin1 또는 CP1252 등을 사용합니다. 보다 정교한 접근 방식은 언어 별 문자 페어링을 시도하고 찾을 수 있지만, 도서관이나 그와 같은 일을하는 것을 알지 못합니다.

나는 이것을 사용하여 비슷한 일을하기 위해 사용했습니다.

http://www.conceptdevelopment.net/localization/nchardet/

Win32의 istextunicode를 사용하십시오.

일반적으로, 그것은 어려운 프롬 렘입니다. 보다: http://blogs.msdn.com/oldnewthing/archive/2007/04/17/2158334.aspx.

해킹 기술은 텍스트의 MD5를 취한 다음 텍스트를 디코딩하고 다양한 인코딩으로 다시 인코딩하여 각각 MD5를 사용하는 것일 수 있습니다. 일치하면 인코딩이라고 생각합니다.

많은 파일을 처리하는 것은 분명히 너무 느리지 만 텍스트 편집기와 같은 경우 작동하는 것을 볼 수 있습니다.

그 외에는 Java 라이브러리를 포팅하는 손이 더러워집니다. 이 게시물 그것은 Delphi So 질문이나 IE Mlang 기능을 사용하여 나왔습니다.

이 (내가 알 수있는 한, 동등한) 질문에 대한 나의 (최근) 답변을 참조하십시오. 텍스트 파일의 인코딩/코딩을 감지하려면 어떻게해야합니까?

MLANG 및 NCHARDET과 같은 다양한 "국가적"인코딩을 추측하려고 시도하지 않고 오히려 어떤 종류의 비공개 파일이 발생할 가능성이 있는지 알고 있다고 가정합니다. 내가 당신의 질문에서 알 수있는 한, 그것은 당신의 문제를 매우 안정적으로 해결해야합니다 (mlang의 "블랙 박스"에 의존하지 않고).

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