要生成ascii值并输入$bitmask
,我使用:
perl -E 'say chr 101' > value_ascii.txt
当我尝试为数字1185644
生成ascii值时,我的问题出现了。也就是说,现在我希望$bitmask
的值是对应于数值1185644
的ascii值。
如果我使用perl -E 'say chr 1185644' > ascii_expected.txt
,我没有得到从1185644第n个子集到1185744第n个子集的正确范围。所以我认为转换perl -E 'say chr 1185644' > ascii_expected.txt
不起作用。
我一直试图正确获取的ascii值1185644做:
perl -E 'say chr 1185644' > ascii_expected.txt
但是打印出来的是:
ô¡<0x9d>¬
:
Wide character in say at -e line 1.
我试着去理解如何使用它:
sub nice_string {
join("",
map { $_ > 255 # if wide character...
? sprintf("\x{%04X}", $_) # x{...}
: chr($_) =~ /[[:cntrl:]]/ # else if control character...
? sprintf("\x%02X", $_) # x..
: quotemeta(chr($_)) # else quoted or as themselves
} unpack("W*", $_[0])); # unpack Unicode characters
}
nice_string("foox{1185644}barn")
但我不能
似乎不是正确的值。
I tried to do:
use open OUT => ':locale';
open(O, ">koi8");
print O chr(1185644);
close O;
但是我的输出打印到文件是:
x{12176C}
:
Code point 0x12176C is not Unicode, may not be portable in print at p1.pl line 3.
注意:我期望1185644的ascii_value
,这样我就可以将它用作变量,例如perl中的$b = 'ascii_value';
。
当我尝试为数字1185644生成ascii值时,我的问题出现了
这没有意义。ASCII字符集只有128个不同的字符(0-127)。
我希望$bitmask的值是对应于数值1185644的ascii值
创建一个由值为1185644的字符组成的字符串,可以使用chr(1185644)
。
get error:
Wide character in say at -e line 1.
没有添加编码层的文件句柄期望字节串,也就是说每个字符的值在0..255之间的字符串。1185644显然不在该范围内,因此您提供了一个无效字符串。当发生这种情况时,Perl假定您打算使用utf8[1]对字符串进行编码,并这样做,但是警告您发生了这种情况("Wide character")。
我的输出打印到文件是:
x{12176C}
当文件句柄有编码层时,期望提供Unicode代码点。[2]Unicode Code Point 1185644不是KOI-8字符集的一部分,因此不能被KOI-8编码。x{12176C}
被用来代替不可编码的字符。
所以你要求做一些不可能的事情。那你到底想要做什么?嗯,目前还不清楚,但是也许您希望能够在文件中存储包含字符1185644的字符串,以便您可以取回它。据我所知,只有一种字符编码可以编码Unicode以外的字符,那就是utf8(不要与UTF-8混淆)。[1]可以编码Perl字符串支持的任何字符。
当然,您可以使用自己的格式。例如,我们可以将UCS-4be扩展到64位:
pack "Q>*", unpack "W*", $s # "UCE-8be" encoder
但是人们不得不怀疑为什么要使用大字符字符串。
utf8是perl特有的UTF-8扩展。
大于Unicode支持的值也被某些编码所接受。1185644就是这样一个值。由于找不到更好的名字,我还是叫它们统一码点。这并不排除1185644是一个有效的输入。