我在将一个已经编码和解码的UTF8字符串连接到另一个字符串时遇到了问题。
如果我使用binmode utf8,就像Perl文档建议的那样,警告信息会消失,但所有三个都失败了:
#!/usr/bin/perl
use strict;
use utf8;
use URI::Escape;
# binmode(STDOUT, ":utf8");
my $v = "ضثصثضصثشس";
my $v2 = uri_unescape(uri_escape_utf8($v));
print "Works: $v, ", "$v2\n";
print "Fails: $v, $v2\n";
print "Works: " . "$v2\n";
以下是输出结果:
Works: ضثصثضصثشس ,ضثصثضصثشس
Wide character in print at ./testUTF8.pl line 14.
Fails: ضثصثضصثشس, ضثصثضصثشس
Works: ضثصثضصثشس
如果我使用binmode utf8,就像Perl文档建议的那样,警告信息会消失,但所有三个都失败了:
Fails: ضثصثضصثشس, ضثصثضصثشس
Fails: ضثصثضصثشس, ضثصثضصثشس
Fails: ضثصثضصثشس
发生了什么?我该如何解决这个问题?
P.S. 我需要对URL进行转义。在Perl中是否有像JavaScript一样的转义/取消转义的方法?例如,Perl给出:%D8%B6%D8%AB%D8%B5%D8%AB%D8%B6%D8%B5%D8%AB%D8%B4%D8%B3
当我使用JavaScript对相同的文本进行转义时,我得到的是:%u0636%u062B%u0635%u062B%u0636%u0635%u062B%u0634%u0633