【问题标题】:Converting a file to UTF8 format using Perl使用 Perl 将文件转换为 UTF8 格式
【发布时间】:2010-05-10 07:05:35
【问题描述】:

如何使用 Perl 将文件转换为 utf-8 格式?以及如何检查转换后的文件是否为utf-8格式?

【问题讨论】:

标签: perl format utf-8


【解决方案1】:

没有必要安装到iconv 库的绑定,例如Text::Iconv,因为Perl 已经自带了一个自己的字符编码库:Encode。其中一部分是piconviconv(1) 类似。使用它将文件批量转换为 UTF-8。 ANSI 只是windows-125? 编码组的愚蠢名称。您很可能拥有以windows-1252 编码的文件。示例:

piconv -f windows-1252 -t UTF-8 < input-file > output-file

如果缺少元数据,则必须使用启发式方法来确定文件内容的编码。 I have been recommendingEncode::Detect.

【讨论】:

    【解决方案2】:

    要进行转换,请查看Text::Iconv

      use Text::Iconv;
      $converter = Text::Iconv->new("fromcode", "tocode");
      $converted = $converter->convert("Text to convert");
    

    【讨论】:

    • 谢谢马克...但我不知道如何准确地使用这些行。我有一个 ANSI 格式的文件,它必须以 UTF8 格式保存。当我使用 utf8 命令时,生成的文件仍为 ANSI 格式(我使用记事本检查过)。有什么帮助吗?
    • @xyz,基本上你需要读取文件的内容并使用Iconv或daxim提到的内置编码功能进行转换并将其保存回来。但是,如果您的文件只有 ascii 字符
    • @xyz:ANSI 不是一种格式,而是 Microsoft 用于编码集合的名称。您很可能使用“windows-1252”编码,因此请尝试将“windows-1252”转换为“UTF-8”。
    • 你怎么知道它不是 UTF-8?它是否使用了 ISO-646 之外的任何字符?
    • 当我使用 Text::Iconv;我收到错误消息:'无法在 @INC 中找到 Text/Iconv.pm(@INC 包含:C:/Perl/lib C:/Perl/site/lib 。)'.. 我还安装了其他东西吗? BEGIN 失败——编译在 uni1.pl 第 1 行中止。
    【解决方案3】:

    这取决于你得到的字符串。如果它是一个文件已上传 - 我认为这段代码会有所帮助。但是,如果它是来自网络的文本/将自身转换为 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

    http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024&number=1024&utf8=string-literal&unicodeinhtml=dec

    【讨论】:

    【解决方案4】:

    使用 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) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 2016-01-12
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多