인코딩이 혼합된 텍스트 파일을 단일 인코딩으로 변환하는 방법은 무엇입니까?

인코딩이 혼합된 텍스트 파일을 단일 인코딩으로 변환하는 방법은 무엇입니까?
  1. 다양한 소스(웹 페이지, 기타 텍스트 파일, PDF 파일)의 다양한 부분을 gedit에 복사하고 파일에 저장하여 텍스트 파일을 만들었습니다. 이것이 텍스트 파일에 여러 인코딩이 있는 이유인 것 같지만 확실하지 않습니다. 서로 다른 소스의 서로 다른 부분을 gedit로 복사하여 혼합 인코딩이 포함된 텍스트 파일 생성을 방지하려면 어떻게 해야 합니까?
  2. gedit에서 파일을 열 때마다 gedit는 항상 텍스트의 모든 부분을 올바르게 표시하거나 디코딩할 수 있습니다. gedit가 혼합 인코딩으로 텍스트 파일을 처리할 수 있는 것 같지만 확실하지 않습니다.

    하지만 emacs에서 파일을 열면 올바르게 표시되지 않는 문자가 있을 것입니다. (Emacs가 왜 그렇게 할 수 없는지 잘 모르겠습니다.) 그래서 파일을 혼합 인코딩에서 utf-8과 같은 단일 인코딩으로 변환하고 싶습니다.

    나는 gedit가 텍스트 파일의 다른 부분에 대한 올바른 인코딩을 감지할 수 있다고 생각하고 그렇게 할 수 있는 다른 응용 프로그램이 있는지 모르기 때문에 gedit에 파일을 utf-8로 변환하도록 요청할 수 있습니까? 적어도 파일의 어느 부분에서 어떤 인코딩을 찾는지 알려주세요.

감사해요.

답변1

흠... 솔직히 말해서 다양한 인코딩을 가진 파일의 개념은 다소 불안정합니다. 시간이 좀 있으면,이 기사(그리고이 하나) 읽어볼 가치가 있습니다.

Linux의 경우 파일은 일련의 바이트입니다. 프로그램에 텍스트 파일로 해석하도록 요청하면 바이트와 문자 간의 매핑을 사용하여 해석합니다. 이 매핑은 인코딩입니다. 내가 아는 거의 모든 텍스트 편집기(워드 프로세서는 아님!)는 하나의 파일에 대해 하나의 인코딩 개념만 이해합니다.

나는 전문가가 아닙니다 gedit. 어쩌면 인코딩을 한 줄씩 자동 감지하거나 텍스트 블록별로 텍스트 블록을 자동 감지하는 것과 같은 마법을 부리고 있는 것일 수도 있습니다. 그렇다면 다음을 사용하여 동일한 작업을 시도할 수 있습니다.enca(1):

 while read line; do echo $line | enconv -L none -x utf8; done < text.mixed > text.utf8

...하지만 인코딩을 추측하는 데 enca가 얼마나 좋은지에 따라 다릅니다(예를 들어 동유럽에서는 거의 잘 작동하지만 Latin1에서는 작동하지 않음).

(1) 저장소에 있으므로 sudo apt-get enca.

답변2

저도 같은 문제가 있었는데 Emacs로 해결했습니다. 솔루션은 다음에서 인용됩니다.여기:

또 다른 가능한 해결책은 나타나는 각 지역을 한자로 표시하고 Mx recode-region으로 다시 코딩하여 "텍스트가 실제로 있음"을 utf-16-le로 제공하고 "그러나 다음으로 해석됨"을 utf-16-be로 제공하는 것입니다.

또 다른 방법은 인코딩이 다른 두 부분을 분할하여 다른 파일로 복사하고, 한 부분의 인코딩을 변환하고 다른 부분에 추가하는 것입니다. 제 경우에는 Atom에서는 작동했지만 Notepad++(utf16-le/be)에서는 작동하지 않았습니다.

관련 정보