Linux下检测文件编码

最近看冰与火之歌第三季第6集,然后发现XBMC下载的字幕没法正常显示,但是字幕文件用文本编辑器打开是正常的。按照以往经验这通常是编码造成的问题,然后在网上搜,发现file命令可以检测文件编码,执行一下试试:
老的能够正常播放的文件用file获取文件编码:

[lexchou@lex-server Game.Of.Thrones]$ file -bi Game.of.Thrones.S03E05.zh.srt 
text/plain; charset=iso-8859-1

再看看第六集:

[lexchou@lex-server Game.Of.Thrones]$ file -bi Game.of.Thrones.S03E06.zh.srt 
application/octet-stream; charset=binary

显然这个结果不是我想要的。然后通过研究发现可以利用vim来获取文件编码,毕竟编码是文本编辑器所擅长的事情。

[lexchou@lex-server Game.Of.Thrones]$ alias vimenc='vim -c '\''let $enc = &fileencoding | execute "!echo Encoding:  $enc" | q'\''' 
[lexchou@lex-server Game.Of.Thrones]$ vimenc Game.of.Thrones.S03E06.zh.srt 

Encoding: utf-16

Press ENTER or type command to continue
[lexchou@lex-server Game.Of.Thrones]$ vimenc Game.of.Thrones.S03E05.zh.srt 

Encoding: latin1

Press ENTER or type command to continue

好了,这个latin1就不用管了,至少知道第六集真正的编码是utf-16。那么转换成utf8就可以用了:

[lexchou@lex-server Game.Of.Thrones]$ recode utf16..utf8 Game.of.Thrones.S03E06.zh.srt 

Last modified on 2013-05-31