我正在解析一个HTML页面,我正在比较不同的字符,看看某个页面元素是否是我想要的那个。我得到每个元素的文本,我想确定最后一个字符是否是“ - ”长短划线字符。这是我到目前为止所做的:
$currentiterator
是我正在处理的文字。
if((substr $currentiterator, -1, 1) eq "–") {
print "long dash found"; ## obviously I will do something different
}
但是,此if语句永远不会返回true。当我打印出最后一个字符并且它是一个包含长短划线的实例时,我得到问号钻石的东西(
)我有一种感觉,我会遇到一些编码问题。我遇到的问题是弄清楚我应该将哪个组件转换为什么组件。我需要使用什么编码将我得到的字符转换为substring
?我假设我需要将“ - ”转换为相同的编码 - 但我将如何转换它们?
答案 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";
然而,即便如此,它可能是您的终端能够处理编码的功能。请注意,输出编码本身不会导致此问题。它只会导致字符在调试打印消息中无法正确显示。