2

長い話:
+ ffmpeg を使用して、MP3 ファイルのアーティスト名を確認しています。
+ アーティストの名前にアジア文字が含まれている場合、出力は UTF8 になります。
+ ASCII 文字のみの場合、出力は ASCII になります。

出力は、最初に BOM 表示を使用しません。

問題は、アーティストの名前にたとえば「ä」が含まれている場合、それは ASCII であり、US-ASCII ではないため、「ä」は有効な UTF8 ではなく、スキップされることです。

ffmpeg からの出力テキスト ファイルが UTF8 かどうかを確認するにはどうすればよいですか? アプリケーションにはスイッチがありません。常に UTF8 を使用しないのは単純にばかげていると思います。:/

このようなものは完璧です:

http://linux.die.net/man/1/isutf8

誰かがWindowsのバージョンを知っているなら?

ありがとうございます!

4

2 に答える 2

0

「ä」は有効なUTF-8ではありません...これは正しくありません...
UTF-8が何であるかを明確に理解していないようです。UTF-8は、Unicodeコードポイントをエンコードする方法のシステムです。有効性の問題は文字自体ではなく、どのようにエンコードされているかという問題です... Unicodeコードポイント をエンコードできるシステムはたくさんあります。UTF-8は1つで、UTF16はもう1つです... UTF-8システムでは非常に合法です。実際には、その文字がUnicodeコードポイントを持っている限り、すべての文字が有効です。
"ä"

ただし、ASCIIには128の有効な値しかありません。これは、Unicodeコードポイントシステムの最初の128文字と同じです。Unicode自体は、単なる大きなルックアップテーブルにすぎません。仕事はエンコーディングシステムです。例えば。UTF-8。

128個のASCII文字は最初の128個のUnicode文字と同一であり、UTF-8はこれらの128個の値をASCIIと同様に1バイトで表すことができるため、ASCIIファイルのデータは同じ日付ですが、UTF-8ファイルと呼びます。簡単に言えば、ASCIIはUTF-8のサブセットです... ASCII範囲(つまり、128文字)のデータと区別できません。

ファイルで7ビットASCII準拠を確認できます。

# If nothing is output to stdout, the file is 7-bit ASCII compliant 
# Output lines containing ERROR chars -- to stdout

  perl -l -ne '/^[\x00-\x7F]*$/ or print' "$1"

これは、UTF-8準拠の同様のチェックです。

perl -l -ne '/
   ^( ([\x00-\x7F])              # 1-byte pattern
     |([\xC2-\xDF][\x80-\xBF])   # 2-byte pattern
     |((([\xE0][\xA0-\xBF])|([\xED][\x80-\x9F])|([\xE1-\xEC\xEE-\xEF][\x80-\xBF]))([\x80-\xBF])) # 3-byte pattern
     |((([\xF0][\x90-\xBF])|([\xF1-\xF3][\x80-\xBF])|([\xF4][\x80-\x8F]))([\x80-\xBF]{2}))       # 4-byte pattern
    )*$ /x or print' "$1"
于 2011-12-29T02:09:03.450 に答える
0

このプログラム/ソースはあなたを助けるかもしれません:

BOM (バイト オーダー マスク) のないテキストのエンコーディングを検出し、最適なエンコーディングを選択します ...

于 2011-01-26T19:23:32.747 に答える