【问题标题】:How to read in ISO 8859-1 (Latin-1) encoded text in Perl如何在 Perl 中读取 ISO 8859-1 (Latin-1) 编码文本
【发布时间】:2011-05-12 09:38:14
【问题描述】:

所以我正在尝试编写一个 perl 脚本来读取以 Latin-1 编码的文件。出于某种原因,这只是行不通。当我尝试对我知道在文件中的字符(它在第一行)进行简单搜索时,什么也没有出现。我在下面使用 use encoding "iso 8859-1";,但我也尝试过 binmode(STDIN, ":utf8");。关于我可能做错了什么以及如何改正的任何建议?

use encoding "iso 8859-1";

while(<>)
{
    if(/ó/gi)
    {
    print "Found one!\n";
    }
}

【问题讨论】:

    标签: perl encoding input latin1


    【解决方案1】:

    不要使用use encoding pragma:它坏了。

    在此处指定编码:

    use open ":encoding(Latin1)";
    

    或者把它放在公开的地方:

    open(FH, "< :encoding(Latin1)", $pathname)
       || die "can't open $pathname: $!";
    

    打开后或binmode它:

    binmode(FH, ":encoding(Latin1)")
       || die "can't binmode to encoding Latin1";
    

    如果您使用的是&lt;ARGV&gt;,那么use open 可能是最简单的。

    不要忘记在输出流上设置编码。

    【讨论】:

    • 另一个问题是脚本的编码是什么,因为它使用ó作为文字字符。
    • @cjm:呃,你说得对。我之前只是被use encoding烧了。我现在有纯 7 位 ASCII 或带有 use utf8 杂注的 UTF-8 格式的程序文本,因为我知道 有效。
    • 第一个解决方案不起作用,第二个没有,但是如果我做第二个和第三个,它就可以了。我想我现在只需要对此感到满意。
    • @John:我不会写/ó/,除非你的源代码是 utf8 并且你已经这么说了。我会写/\xF3/。重音仍然存在问题:您是否希望它匹配未重音或不同重音的字符?如果是这样,您需要 NFD 并对其进行标记。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多