hig*_*guy 5 linux perl bibtex character-encoding iconv
我有一个很长的文本文件,在后续的文本块(iso或utf-8)中使用明显不同的编码.它是使用文本附加文本>> file.bib并从不同来源(网页)复制和粘贴的结果.
原则上可以区分这些块,因为它们是bibtex条目
@article{key, author={lastname, firstname}, ...}
Run Code Online (Sandbox Code Playgroud)
我想将它转换为一个连贯的utf-8文件,因为它似乎崩溃了我的bibtex查看器(kbibtex).我知道我可以iconv用来转换整个文件的编码,但我想知道是否有办法修复我的文件而不破坏一些条目.
如果您可以假设每行采用统一编码并且您知道备用编码:
#!/usr/bin/perl
use Encode;
while(<>) {
my $line;
eval {
$line=Encode::decode_utf8( $_ );
}
if ($@) $line=Encode::decode( 'iso-8859-1', $_ ); #not UTF-8
# Now $line is UNICODE.Do something to it
}
Run Code Online (Sandbox Code Playgroud)
如果这些行是混合编码,您仍然可以通过单词执行相同的操作,但您仍然知道替代编码是什么。如果不知道替代编码,或者如果您有多个编码,则需要使用一些编码猜测库,这很可能会猜测错误。