0

次のような変形された文字列がたくさん含まれているテキストファイルを使用しています。

VyplÅ<88>te prosím pole "jméno

私のエディタによると、ファイルのエンコーディングはlatin1です。文字列は発音区別符号を含むチェコ語の文であると想定されているため、間違って表示されるのも不思議ではありません。エディターでutf8およびlatin2エンコーディングを強制しようとしましたが、役に立ちませんでした。また、iconvを使用してファイルをlatin1からutf8またはlatin2に変換しようとしましたが、どちらも役に立ちませんでした。私はこのような問題に頻繁に遭遇し、手動で文字列を書き直す以外の解決策を知りません。これを修正するためのより良い方法はありますか?

編集:

元の文は次のとおりです。

Vyplňte prosím pole "jméno"

不正な形式の文字列が発生する部分の16進ダンプは次のとおりです。

0002640: 6a6d 656e 6f22 5d20 3d20 2744 453a 2056  jmeno"] = 'DE: V
0002650: 7970 6cc5 8874 6520 7072 6f73 c3ad 6d20  ypl..te pros..m 
0002660: 706f 6c65 2022 6a6d c3a9 6e6f 222e 273b  pole "jm..no".';

EDIT2:

decezeが言ったように、上の文は本当に正しいutf8です。しかし、私はちょうどいくつかの奇妙なことを発見しました。ファイルをutf8からutf8(iconvを使用)にトランスコードしようとすると、単語でエラーが発生します:Postgebühratcharacter ü。16進ダンプを見ると、この文字は\xfc(10進数で252)として表されます。これは、有効なlatin1バイトエンコーディングですüが、完全に無効なutf8バイトエンコーディングです。ファイルの一部はlatin1にあり、別の部分はutf8にあるようです。これがlatin1にあるファイルの一部です(おそらく):

0000250: 506f 7374 6765 62fc 6872 273b 0a09 0963  Postgeb.hr';...c
0000260: 6f6e 665b 2277 6166 6572 7322 5d20 3d20  onf["wafers"] = 
0000270: 2744 453a 206f 706c c3a1 746b 20c3 273b  'DE: opl..tk .';

これを詳しく調べてみると、これはlatin1でも有効なlatin1の原因ではないようですが、文字化けしています(DE: oplátk ÃおそらくではなくDE: oplatky za)。ファイルのこの部分には、破損したテキストが含まれているようです。

このファイルのエンコーディングがどのように混同されたのか理解できません。何か案は?

4

2 に答える 2

2

ファイルにLatin2でエンコードされたテキストが含まれていると想定される場合、 Latin1などから変換しようとすると、もちろん混乱します。

問題は、シングルバイトのラテン語*エンコーディングはすべてバイトレベルで同じように交換可能に見えるため、テキストエディタがエンコーディングを自動的に認識しないことです。エディターがエンコーディングがLatin1であると「通知」した場合、それは、現在ファイルをLatin1として解釈していることを意味します。明らかにそれは間違っています。

ファイルをLatin2として扱うようにエディターに指示するか(Open As ... Latin2、またはエディターがこの選択を提供します)、またはファイルをLatin2からエディターが正しく処理するエンコードに変換する必要があります。

エンコーディングをよりよく理解するために、すべてのプログラマーがテキストを操作するためのエンコーディングと文字セットについて絶対に、積極的に知っておく必要があることを読むことをお勧めします。


投稿された16進ダンプへの応答:そのファイルUTF-8でエンコードされています。

于 2013-03-21T11:36:11.607 に答える
0

Iconv が最適ですが、正しいエンコーディングを知っている必要があります。ヨーロッパには多くの ASCII 拡張機能があったため、Latin2 (iso8859-2) は可能性の 1 つにすぎません。これは何語で書かれているはずですか?

于 2013-03-21T11:38:12.480 に答える