2017-05-19 2 views
0

이것은 파일 인코딩을 변환하는 제 함수입니다. 변환 전 Notepad ++에서 파일을 열고 인코딩 메뉴를 사용하여 인코딩을 선택하면 인코딩이 UTF 8로 표시됩니다. 다음 함수를 사용하여 파일을 변환하려고 시도했지만 ASCII로 변환하지 않았습니다.
기능을 살펴보십시오.'BOM이없는'파일의 인코딩을 'Windows - 1252'인코딩 된 파일로 변경하는 방법은 무엇입니까?

public static void ConvertFileEncoding(string srcFile, Encoding srcEncoding, string tempFile) 
    { 

     try 
     { 
      using (var reader = new StreamReader(srcFile)) 
      using (var writer = new StreamWriter(tempFile, false, Encoding.ASCII)) 
      { 
       char[] buf = new char[1024]; 

       while (true) 
       { 
        int count = reader.Read(buf, 0, buf.Length); 
        if (count == 0) 
        { 
         break; 
        } 
        writer.Write(buf, 0, count); 
       } 
      } 

      System.IO.File.Copy(tempFile, srcFile, true); // Source file is replaced with Temp file 
      DeleteTempFile(tempFile); 

      // TO DO -- Log Sucess Details 
     } 
     catch (Exception e) 
     { 
      throw new IOException("Encoding conversion failed.", e); 

      // TO DO -- Log failure Details 
     } 
    } 

나는 윈도우 1252에 BOM하지 않고 파일을 변환 할 때 무엇을 잘못 happenes을 이해 도와주세요?

+0

ASCII 또는 Windows-1252 중에서 원하는 것은 무엇입니까? 파일의 인코딩은 작성자에 의해 결정되지만 출력은 수많은 인코딩에 대해 동일 할 수 있습니다. (테스트 데이터가 이것에 종속되어 혼동하지 마십시오.) 독자는 작가가 사용한 인코딩을 사용해야합니다. –

+0

유니 코드 입력 데이터에 대상 문자 집합에 포함되지 않은 문자가 포함되어 있으면 어떻게됩니까? 선택 사항 : '?'로 바꾸거나, 예외를 던지거나, 절대로 일어나지 않을 것이라고 생각하십시오. –

답변

1

ASCII 값이 128 미만인 문자는 UTF-8 또는 ASCII로 인코딩 할 때 모두 동일합니다. 파일이이 파일들로만 구성되어 있다면 파일은 UTF-8 또는 ASCII와 동일합니다.

프로그램이 동일하기 때문에 프로그램을 구분할 수 없습니다. UTF-8은 현재 매우 일반적으로 사용되기 때문에 추측 할 파일의 내용 이외의 정보가 프로그램에없고 인코딩을 표시하려고 할 때 합리적인 선택입니다.

+0

내 요구 사항은 파일의 내용을 SQL 테이블로 가져 오는 것이었다. 파일이 Windows - 1252 인코딩에 없으면 가져 오기가 실패합니다. –

+0

이러한 가정 된 탐지 알고리즘이 모든 것을 말하면 좋을 것입니다. 예를 들어 파일은 UTF-8 승/BOM, Windows-1252, ... 및 ASCII로 인코딩 된 텍스트로 읽을 수 있습니다 (여기를 클릭하십시오. 전체 목록). –

관련 문제