ビデオomxplayerの字幕ファイルに問題がありました。それを解決するには、windows-1250からUTF-8エンコーディングに変換する必要がありました。私の質問は、どのエンコードが使用されている特定のファイルをどのように確認できますか?
ビデオomxplayerの字幕ファイルに問題がありました。それを解決するには、windows-1250からUTF-8エンコーディングに変換する必要がありました。私の質問は、どのエンコードが使用されている特定のファイルをどのように確認できますか?
回答:
ファイルが元々エンコーディングXで書き込まれたかどうかを実際に自動的に見つけることはできません。
ただし、特定のコーデックを使用して、完全なファイルを何らかの方法で(必ずしも正確にではなく)正常にデコードできるかどうかを簡単に確認できます。特定のエンコーディングに有効でないバイトが見つかった場合、それは別のものである必要があります。
問題は、多くのコーデックが類似しており、同じ「有効なバイトパターン」を持ち、単に異なる文字として解釈することです。たとえば、あるä
エンコーディングはé
別のエンコーディングまたは別のエンコーディングに対応しø
ます。コンピュータは、バイトをどのように解釈すれば正しく人間が読み取れるテキストになるかを実際に検出することはできません(すべての種類の言語の辞書を追加してスペルチェックを実行できる場合を除く)。また、一部の文字セットは実際には他の文字セットのサブセットであることも知っておく必要があります。たとえば、ASCIIエンコーディングはANSIファミリまたはUTF-8のような最も一般的に使用されるコーデックの一部です。これは、たとえば、UTF-8として保存された単純なラテン文字のみを含むテキストは、ASCIIとして保存された同じファイルと同一であることを意味します。
ただし、できないことの説明から、実際にできることの説明に戻りましょう。
ASCII /非ASCII(通常UTF-8)テキストファイルの基本的なチェックには、このfile
コマンドを使用できます。ただし、多くのコーデックを認識せず、ファイルの最初の数kBのみを検査します。残りには新しい文字が含まれないと仮定します。一方、さまざまなスクリプト、HTML / XMLドキュメント、および多くのバイナリデータ形式(テキストファイルの比較にはまったく関心がありません)など、他の一般的なファイルタイプも認識し、非常に長い行があるかどうかにかかわらず追加情報を出力する場合があります改行シーケンスのタイプ(UNIX:LF、Windows:CR + LFなど)が使用されます。
$ cat ascii.txt
I am an ASCII file.
Just text and numb3rs and simple punctuation...
$ cat utf8.txt
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!
$ file ascii.txt utf8.txt
ascii.txt: ASCII text
utf8.txt: UTF-8 Unicode text
それだけでは不十分な場合は、ここでこの回答のために書いたPythonスクリプトを提供できます。このスクリプトは、完全なファイルをスキャンし、指定された文字セットを使用してデコードを試みます。成功した場合、そのエンコーディングは潜在的な候補です。それ以外の場合、それでデコードできないバイトがある場合、リストからその文字セットを削除できます。
指定されたプログラムfile
がこれを行うことができます。例:
$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators
それがどのように行われたかに興味があるなら、をご覧くださいsrc/encoding.c
。
file
推測しますが、あまりよくありません。たとえば、私のテストでは、MacRomanとCP-1252の両方をISO-8859と誤認し、その結果、「š」と「ß」がスクランブルされました。
.sql
ファイルの正しいエンコードを見つけるために数時間を費やし、file
実際にgzip
圧縮ファイルであることを示しました!
piconv
エンコーディングを変更するには;)