2016-12-22 5 views
2

というファイルがUTF-8でとされていましたが、英語以外の文字のいくつかには奇妙なエンコーディングがあります。例えば、この謎の符号化では、ハングル文字列ミステリーUTF-8のようなエンコーディング

한국경북영덕군강구면

は次のように符号化される。

0xED959C 0xEAB5AD 0xEAB2BD 0xEBB63F0xEC983F0xEB3F95 0xEAB5B0 0xEAB095 0xEAB5AC 0xEBA9B4

(太字の違い)ではなく、標準のUTF-8より:私は見ている

0xED959C 0xEAB5AD 0xEAB2BD 0xEBB6810xEC98810xEB8D95 0xEAB5B0 0xEAB095 0xEAB5AC 0xEBA9B4"キリル文字や中国語の文字と同じ現象 - 一部の文字はUTF-8と同じエンコーディングを持ちますが、いくつかの文字は異なります。文字化けした文字は、文字化けしていない文字と同じバイト幅を持ち、拡張子セットの一部ではないことを確認しました。また、私はすでにではなく、 Java "Modified UTF-8"であることを確認しました。

これにはどのような考えがありますか?

ところで、私はコードや、最初にファイルを書いた人にはアクセスできません。

また、私はMac 10.11.6を使用していますが、それは何か関係があります。

答えて

3

例の文字列は、UTF-8で構成されていますが、特定のバイト値(x81とx8D)がASCII疑問符?(x3F)に置き換えられています。唯一のもっともらしい説明は、あなたのサンプル文字列が、他のエンコーディング(たぶん1バイト文字セット)に従って内容を解釈しようとしたソフトウェアを通過したことと、無効な文字を?に置き換えたソフトウェアを通過したことですUnicodeテキストプロセッサが無効なUnicode文字をU + FFFDに置き換える可能性があります)。

残念なことに、少なくとも2つの別個のバイト値(実際にはあなたの例には現れない)が置き換えられているので、そのプロセスは実際には可逆ではありません。したがって、元のバイト値を識別する保証された方法はありません。すべての場合。これがどれくらい重要であるかによって、—に費やす時間に応じて、置き換えられた完全なバイトセットを識別し、各バイトごとにそれぞれの値を試して、結果の文字関連する言語の一部のコーパスからのバイグラムの頻度(例えば)を計算し、最も確からしいバイトを選択する。 (もちろん、いくつかの間違いが発生する可能性があります)エラー率を計算するには、というテキストでというテキストを使用してください。

関連する問題