我如何使用Perl将文件转换为utf-8格式?如何检查已转换的文件是否为utf-8格式?
iconv
库的绑定,如Text::Iconv
并不必要,因为Perl已经自带了一个字符编码库:Encode
。它的一部分是piconv
,一个iconv(1)
替代品。使用它来批量转换文件为UTF-8。 ANSI只是一个愚蠢的名称,用于表示windows-125?
编码的一组。您很可能有以windows-1252编码的文件。例如:piconv -f windows-1252 -t UTF-8 < input-file > output-file
如果元数据缺失,就需要使用启发式方法来确定文件内容的编码。我一直推荐使用Encode::Detect。Encode::Detect::Detector
。
要进行转换,请查看Text::Iconv
use Text::Iconv;
$converter = Text::Iconv->new("fromcode", "tocode");
$converted = $converter->convert("Text to convert");
这取决于你得到的字符串。如果是上传的文件,我认为这段代码会有帮助。但如果是从网页获取的文本/自动转换成UTF-8编码的文本(因为你正在使用UTF-8),那么你将会遇到问题。
我通常使用:
use Encoding::Guess
my $enc = guess_encoding($string);
然后使用上述代码,我执行以下操作:
use Text::Iconv;
$converter = Text::Iconv->new($enc,"utf-8");
$converted = $converter->convert("Text to convert");
UTF-8列表可以在此处找到:
http://www.fileformat.info/info/charset/UTF-8/list.htm?start=1024
使用 Encode 模块,您可以轻松编码为不同的编码格式
e.g;
my $str = "A string in Perl internal format ....";
my $octets = encode("utf-8",$str,Encode::FB_CROAK);
要检查 utf,您可以使用函数
is_utf8($str,Encode::FB_CROAK)