5

後続のテキスト ブロック (iso または utf-8) で明らかに異なるエンコーディングを使用する長いテキスト ファイルがあります。>> file.bibこれは、さまざまなソース (Web ページ) からコピー アンド ペーストを使用してテキストを追加した結果です。

bibtexブロックはエントリであるため、原則として区別できます。

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

私のbibtexビューア(kbibtex)がクラッシュするように見えるので、一貫したutf-8ファイルに変換したいと思います。を使用してファイル全体のエンコーディングを変換できることは知っていiconvますが、一部のエントリを破損することなくファイルを修正する方法があるかどうかを知りたいです。

4

2 に答える 2

3

これにはvimを使用しますが、どのエディターでも実行できると思います。

  • エンコーディングを変更したいテキストのブロックを (shift+v) で選択します。

  • type :!enca -L lang - (「lang」をあなたの言語に置き換えます。私は「enca -L cs」を使用します。enca ユーティリティは、選択したブロックの最も可能性の高いエンコーディングを教えてくれるはずです)

  • u を押します (テキストに表示された enca の回答を取り消します)

  • もう一度ブロックを選択し、今度は :!iconv -f defined_encoding -t UTF-8 を実行します

vim は自動的に pressed : を :\<,> に展開することに注意してください。これは、テキスト ブロックでプログラムを実行する場合にまさに必要なモードです。

于 2012-05-21T20:00:02.087 に答える
3

各行のエンコードが一様であると想定でき、かつ代替エンコードがわかっている場合:

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

} 

行が混合エンコーディングである場合でも、単語で同じことを行うことができますが、代替エンコーディングが何であるかはまだわかっています。代替エンコーディングがわからない場合、または複数ある場合は、エンコーディング推測ライブラリを使用する必要がありますが、推測が間違っている可能性があります。

于 2012-05-21T16:28:34.050 に答える