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

该程序/来源可能会帮助您:

检测没有 BOM(字节顺序掩码)的文本的编码并选择最佳编码...

于 2011-01-26T19:23:32.747 回答
0

你说,“ä”不是有效的 UTF-8 ……这不正确……
看来你对 UTF-8 是什么并没有清楚的认识。UTF-8 是一个如何编码Unicode 代码点的系统。有效性问题不在于字符本身,而是如何编码的问题......
有许多系统可以编码Unicode 代码点;UTF-8 是一个,UTF16 是另一个......"ä" 在 UTF-8 系统中是相当合法的......实际上所有字符都是有效的,只要该字符具有 Unicode 代码点。

但是,ASCII 只有 128 个有效值,这等同于 Unicode 代码点系统中的前 128 个字符。Unicode 本身只不过是一个大查找表。编码系统的工作是什么?例如。UTF-8。

因为这 128 个 ASCII 字符与前 128 个 Unicode 字符相同,并且因为 UTF-8 可以将这 128 个值表示为单个字节,就像 ASCII 一样,这意味着 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 回答