我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
当前回答
我知道您对更一般的答案感兴趣,但是ASCII中的优点通常也适用于其他编码。下面是一个Python单行程序,用于确定标准输入是否是ASCII。(我很确定这在Python 2中可以工作,但我只在Python 3上测试过。)
python -c 'from sys import exit,stdin;exit()if 128>max(c for l in open(stdin.fileno(),"b") for c in l) else exit("Not ASCII")' < myfile.txt
其他回答
我知道您对更一般的答案感兴趣,但是ASCII中的优点通常也适用于其他编码。下面是一个Python单行程序,用于确定标准输入是否是ASCII。(我很确定这在Python 2中可以工作,但我只在Python 3上测试过。)
python -c 'from sys import exit,stdin;exit()if 128>max(c for l in open(stdin.fileno(),"b") for c in l) else exit("Not ASCII")' < myfile.txt
在Perl中,使用Encode::Detect。
将ISO 8859-1编码转换为ASCII:
iconv -f ISO_8859-1 -t ASCII filename.txt
在Python中,你可以使用chardet模块。
真的很难确定它是否是ISO 8859-1。如果你有一个只有7位字符的文本,也可能是ISO 8859-1,但你不知道。如果你有8位字符,那么上区域字符也存在于顺序编码中。因此,你必须使用字典来更好地猜测它是哪个单词,并从中确定它必须是哪个字母。最后,如果您检测到它可能是UTF-8,那么您可以确定它不是ISO 8859-1。
编码是最难做的事情之一,因为你永远不知道是否没有任何东西告诉你。