视频omxplayer中的字幕文件出现了一些问题。为了解决这个问题,我必须将Windows-1250转换为UTF-8编码。我的问题是,如何查看某些特定文件使用的编码?
视频omxplayer中的字幕文件出现了一些问题。为了解决这个问题,我必须将Windows-1250转换为UTF-8编码。我的问题是,如何查看某些特定文件使用的编码?
Answers:
您真的无法自动发现文件最初是否使用编码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
更改编码;)