2012-05-21 3 views
5

다음 텍스트 블록 (iso 또는 utf-8)에서 다른 인코딩을 사용하는 긴 텍스트 파일이 있습니다. >> file.bib을 사용하여 텍스트를 추가하고 다른 소스 (웹 페이지)에서 복사하여 붙여 넣은 결과입니다. 그들은 내가 내하여 BibTex 뷰어 (kbibtex를) 충돌을 보이기 때문에 일관성있는 UTF-8 파일로 변환하고자하는 bibtex 항목인코 히어 런트 인코딩 된 텍스트 파일의 인코딩 수정

@article{key, author={lastname, firstname}, ...} 

있는 그대로

블록은 원칙적으로 구별 할 수있다. 나는 iconv을 사용하여 전체 파일의 인코딩을 변환 할 수 있다는 것을 알고 있지만 항목이 손상되지 않으면 서 내 파일을 고칠 수있는 방법이 있는지 알고 싶습니다.

+4

자세한 내용은 [혼합 인코딩 파일을 Perl에서 UTF8로 변환하는 방법에 대한 질문] (http://stackoverflow.com/questions/6897982/questions-about-converting-a-mixed-encoding-file- to-utf8-in-perl) 어떤 정보가 유용한 지 비교해보십시오. – daxim

+0

먼저 파일을 개별 HTML 문서로 분할해야합니다. 그런 다음 HEAD 요소에서 각 문서에서 BOM 및 문자 세트를 확인할 수 있습니다. – ikegami

답변

3

각 라인에 대한 균일 한 인코딩을 가정 할 수있다 그리고 당신은 대체 인코딩 알고있는 경우 : 선이 혼합 인코딩하는 경우

#!/usr/bin/perl 
use Encode; 
while(<>) { 
     my $line; 
     eval { 
     $line=Encode::decode_utf8($_); 
     } 
     if ([email protected]) $line=Encode::decode('iso-8859-1', $_); #not UTF-8 
     # Now $line is UNICODE.Do something to it 

} 

당신은 단어 같은 일을 계속 할 수 있지만, 여전히 대체 무엇인지 부호화. 대체 인코딩을 모르는 경우 또는 둘 이상인 경우 일부 인코딩 방식의 추측 라이브러리를 사용해야하므로 잘못 추측 할 수 있습니다.

+2

그것은 UTF-8과 iso-8859-1 사이에 있으며 대신 [Encoding :: FixLatin] (http://search.cpan.org/perldoc?Encoding::FixLatin)과 함께 제공되는'fix_latin' 도구를 사용하십시오 Alien Life Form의 코드. – ikegami

3

나는 이것을 위해 vim을 사용하지만, 나는 그것이 어떤 편집기에서나 될 수 있다고 생각한다.

  • 인코딩을 변경하려는 텍스트 블록을 선택하십시오 (shift + v).

  • 유형 : ENCA -L 랭 - ​​(나는 'ENCA -L CS'를 사용, 당신의 언어 '를 사용하여 lang을'대체 ENCA 유틸리티는 당신에게 선택된 블록의 가장 가능성이 인코딩 알려 주어야합니다.)

  • 을! !

    눌러 U 실행, 다시 블록을 선택이 시간을

  • (그래서 당신은 당신의 텍스트에 나타난 ENCA의 대답을 취소)의 iconv -f determined_encoding -t UTF-8

주를이 vim이 자동으로 다음을 누르십시오. to : \ <>이 비주얼 모드에있을 때 텍스트 블록에서 프로그램을 실행하기 위해 원하는 것입니다.