テキストファイルのエンコーディングをどのようにテストしますか?動作しますか?それは何ですか?

テキストファイルのエンコーディングをどのようにテストしますか?動作しますか?それは何ですか?

.htm開いているファイルが複数あります。編集者警告/エラーはありませんが、で同じファイルを開くと、Jedit無効なUTF-8エンコーディングに関する警告が表示されます。

HTMLメタタグは「charset = ISO-8859-1」を宣言します。 Jedit 許可代替エンコーディングリストそしてエンコーディング自動検出器リスト(現在「BOM XML-PI」)即時の問題を修正しました。でも思いました。メタデータが存在しない場合はどうなりますか?

エンコーディング情報が利用できない場合、どのエンコーディングを適用できるかを「最高の推測」にすることができるCLIプログラムはありますか?

そして少し違う質問ですが、テストできるCLIプログラムはありますか?みんな知ってるコーディング?

ベストアンサー1

このfileコマンドは、エンコーディングで「最高の推測」を使用します。

以下は、UTF-8でエンコードされたドイツ語の発音区別記号を含むファイルのデモです。

$ file umlaut-utf8.txt
umlaut-utf8.txt:     UTF-8 Unicode text

発音区別符号は、他の2つの符号化において同一である。

$ file umlaut-iso88591.txt umlaut-utf16.txt
umlaut-iso88591.txt: ISO-8859 text
umlaut-utf16.txt:    Little-endian UTF-16 Unicode text, with no line terminators

3つすべてが混在すると、誤ったエンコードが発生します。

$ file umlaut-mixed.txt
umlaut-mixed.txt:    data

この-iパラメータを使用してMIMEタイプとして出力できます。

$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-mixed.txt:    application/octet-stream; charset=binary
umlaut-utf16.txt:    text/plain; charset=utf-16le
umlaut-utf8.txt:     text/plain; charset=utf-8

(これはMacでも同様です-I。Appleの開発者は違う考えだからです)

このfileコマンドは非常に制限的です。いくつかのバイトをチェックし、エンコードが何であるかを推測しようとします。パターンを認識すると、これはエンコードと言われます。パターンが認識されない場合、または認識されたパターンが互いに競合している場合は、「データ」(またはMIME形式のバイナリ)を表示します。これが本質的に意味するのは、有効なエンコーディングを認識できないことです。

これは、文字とウムラウトの分布に基づいて、テキストがスペイン語かフランス語かを識別する方法と似ています。受信したテキストの文字分布が意味をなさない場合は、そのテキストが「間違った」テキストであると結論付けることができます。しかし、それは以前に一度も見たことがない言語かもしれません。これをLorem Ipsumと比較してみてください。テキストはバラより自然なテキストに似ていますが、実際には意味がありません。https://en.wikipedia.org/wiki/Lorem_ipsum

file以下は、正しいエンコーディングが認識されない例です。DOSテキスト(ブロック図文字、CRLF行終端)とエスケープシーケンスを含むファイルの表示

fileコマンドの詳細は次のとおりです。http://www.linfo.org/file_command.html


ファイルをどのように生成しますか?

$ echo ä > umlaut-utf8.txt

この行をコピーして実行できます。 utf8ウムラウトを含むファイルを生成する必要があります。

16進ダンプを確認してください。

$ hexdump -C umlaut-utf8.txt 
00000000  c3 a4 0a                                          |...|
00000003

別のエンコーディングに変換:

$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt 
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt 

16進ダンプ:

$ hexdump -C umlaut-iso88591.txt 
00000000  e4 0a                                             |..|
00000002
$ hexdump -C umlaut-utf16.txt 
00000000  ff fe e4 00 0a 00                                 |......|
00000006

と比較するhttps://en.wikipedia.org/wiki/ä#Computer_encoding

3つすべてを混ぜ合わせて「間違った」アイテムを作成します。

$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt 

おすすめ記事