gpt4 book ai didi

Perl:文本连接后编码困惑

转载 作者:行者123 更新时间:2023-12-02 08:59:29 26 4
gpt4 key购买 nike

我在更新/升级一些遗留代码时遇到了奇怪的情况。

我有一个包含 HTML 的变量。在我输出它之前,它必须填充大量数据。本质上,我有以下几点:

for my $line (@lines) {
$output = loadstuff($line, $output);
}

loadstuff()内部,有以下内容

sub loadstuff {
my ($line, $output) = @_;
# here the process is simplified for better understanding.
my $stuff = getOtherStuff($line);
my $result = $output.$stuff;
return $result;
}

该函数构建一个由不同区域组成的页面。所有区域都是独立加载的,这就是为什么有一个for循环。

麻烦就从这里开始。当我从头开始加载页面时(单击链接,Perl 执行并提供 HTML),一切都加载得很好。每当我通过 AJAX 加载第二个页面进行比较时,该 HTML 就会破坏编码。

我将问题追踪到了这一行my $result = $output.$stuff。在连接之前,$output$stuff 都很好。但之后,$result 中的编码就困惑了。

有人知道为什么串联会弄乱我的编码吗?当我们讨论这个主题时,为什么只有通过 AJAX 完成调用时才会发生这种情况?

编辑 1

Perl 和 AJAX 调用都执行完全相同的函数来构建页面。因此,每当我修复 AJAX 问题时,新加载的页面都会出现问题。似乎只有 AJAX 启动调用时才会发生这种情况。

在这种特殊情况下,唯一的区别是页面的当前值与旧值进行比较(这是备份/恢复功能)。从这里开始,一切都一样了。变量中的编码(据我所知)是可以的。我什至仅对从 AJAX 加载的值尝试了 Encode 函数,但无济于事。根据“Kate”的说法,文件本身似乎是 utf8。

除此之外,我还有另一个具有相同行为的函数,它使用完全相同的函数、值和文件。当从 Perl/Apache 启动调用时,编码正常。通过 AJAX,再次变得困惑。

我一直在检查 AJAX 请求 (jQuery),但没有发现任何奇怪的地方。编码好像也是utf8。

最佳答案

Perl 为每个标量值都有一个“utf8”标志,该标志可以是“on”或“off”。该标志的“On”状态告诉 perl 将值视为 Unicode 字符的字符串。

如果将一个 utf8 标志关闭的字符串与一个 utf8 标志打开的字符串连接起来,perl 会将第一个字符串转换为 Unicode。这是问题的常见根源。

在连接之前,您需要使用 Encode::encode() 将两个变量转换为字节,或者使用 Encode::decode() 将两个变量转换为 Perl 的内部格式。

参见perldoc Encode

关于Perl:文本连接后编码困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2372417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com