1

我正在解析一个 HTML 页面,并且我正在比较不同的字符以查看某个页面元素是否是我想要的。我正在获取每个元素的文本,我想确定最后一个字符是否是“-”长破折号字符。这是我到目前为止所拥有的:

$currentiterator是我正在使用的文本。

if((substr $currentiterator, -1, 1) eq "–") {
    print "long dash found"; ## obviously I will do something different
}

但是,这个 if 语句永远不会返回 true。当我打印出最后一个字符并且它是一个包含长破折号的实例时,我得到了问号菱形的东西(�),我感觉我会遇到一些编码问题。我遇到的麻烦是弄清楚我应该将哪个组件转换为什么。我需要什么编码来转换我得到的字符substring?我假设我需要将“–”转换为相同的编码——但我将如何转换它们呢?

4

1 回答 1

3

Encode核心模块允许您在 Perl 中使用不同的字符编码。

在不了解程序设计的情况下,很难准确地说出您需要做什么。

可能是您没有正确设置输入的编码。这里有几种方法(文档中的所有示例;您需要找出所需的正确编码):

解码一个字符串:

  $string = decode("iso-8859-1", $octets);

使用适当的编码打开文件句柄:

open(INPUT,  "< :encoding(shiftjis)", $infile)
    || die "Can't open < $infile for reading: $!";

但是,也可能是 Perl 没有正确读取脚本中的 utf-8 字符。正如阿蒙所说,你应该use utf8确保它会。

最后,不正确的显示可能是由标准输出的编码引起的。您可以像这样设置默认输入/输出编码:

use encoding "euc-jp";

但是,即使那样,它也可能是您的终端能够处理编码的功能。请注意,输出编码本身不会导致此问题。它只会导致字符无法在您的调试打印消息中正确显示。

于 2012-12-17T09:31:33.087 回答