【发布时间】:2010-05-10 07:05:35
【问题描述】:
如何使用 Perl 将文件转换为 utf-8 格式?以及如何检查转换后的文件是否为utf-8格式?
【问题讨论】:
-
请减少问题标题中的大写字母数量。它肯定不会得到更快的答复。
如何使用 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
如果缺少元数据,则必须使用启发式方法来确定文件内容的编码。 I have been recommendingEncode::Detect.
【讨论】:
要进行转换,请查看Text::Iconv
use Text::Iconv;
$converter = Text::Iconv->new("fromcode", "tocode");
$converted = $converter->convert("Text to convert");
【讨论】:
这取决于你得到的字符串。如果它是一个文件已上传 - 我认为这段代码会有所帮助。但是,如果它是来自网络的文本/将自身转换为 utf-8 的文本(因为您正在使用 utf-8),那么您将无法弄清楚它。
我通常使用:
使用编码::猜测
我的 $enc = guess_encoding($string);
然后用上面的代码,我做:
使用 Text::Iconv;
$converter = Text::Iconv->new($enc,"utf-8");
$converted = $converter->convert("要转换的文本");
可在此处找到仅供参考的 utf-8 列表:
http://www.fileformat.info/info/charset/UTF-8/list.htm?start=1024
【讨论】:
使用 Encode 模块,您可以轻松地以不同的编码方式进行编码
例如;
my $str = "A string in Perl internal format ....";
my $octets = encode("utf-8",$str,Encode::FB_CROAK);
要检查 utf 你可以使用函数
is_utf8($str,Encode::FB_CROAK)
【讨论】: