比较具有不同编码的特殊字符

时间:2012-12-17 04:22:20

标签: perl special-characters

我正在解析一个HTML页面,我正在比较不同的字符,看看某个页面元素是否是我想要的那个。我得到每个元素的文本,我想确定最后一个字符是否是“ - ”长短划线字符。这是我到目前为止所做的:

$currentiterator是我正在处理的文字。

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

但是,此if语句永远不会返回true。当我打印出最后一个字符并且它是一个包含长短划线的实例时,我得到问号钻石的东西( )我有一种感觉,我会遇到一些编码问题。我遇到的问题是弄清楚我应该将哪个组件转换为什么组件。我需要使用什么编码将我得到的字符转换为substring?我假设我需要将“ - ”转换为相同的编码 - 但我将如何转换它们?

1 个答案:

答案 0 :(得分:3)

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

如果不了解程序的设计,很难准确说出您需要做什么。

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

解码字符串:

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

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

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

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

最后,标准输出的编码可能导致显示不正确。您可以设置默认的输入/输出编码,如下所示:

use encoding "euc-jp";

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