我在/src/core/Rakudo/Internals.pm中看到一个带有一个简短编码列表的哈希,但没有办法在它之外找到它.该NORMALIZE_ENCODING
方法是唯一使用它的方法.使用不在此列表中的内容,您将获得异常.
那么,在尝试之前我怎么知道什么是有效的,特别是因为缺少一些重要的编码?
my $encodings := nqp::hash(
# fast mapping for identicals
'utf8', 'utf8',
'utf16', 'utf16',
'utf32', 'utf32',
'ascii', 'ascii',
'iso-8859-1', 'iso-8859-1',
'windows-1252', 'windows-1252',
# with dash
'utf-8', 'utf8',
'utf-16', 'utf16',
'utf-32', 'utf32',
# according to http://de.wikipedia.org/wiki/ISO-8859-1
'iso_8859-1:1987', 'iso-8859-1',
'iso_8859-1', 'iso-8859-1',
'iso-ir-100', 'iso-8859-1',
'latin1', 'iso-8859-1',
'latin-1', 'iso-8859-1',
'csisolatin1', 'iso-8859-1',
'l1', 'iso-8859-1',
'ibm819', 'iso-8859-1',
'cp819', 'iso-8859-1',
);
method NORMALIZE_ENCODING(Str:D \encoding) {
my str $key = nqp::unbox_s(encoding);
if nqp::existskey($encodings,$key) {
nqp::atkey($encodings,$key)
}
else {
my str $lc = nqp::lc($key);
nqp::existskey($encodings,$lc)
?? nqp::atkey($encodings,$lc)
!! nqp::lc($key)
}
}
Run Code Online (Sandbox Code Playgroud)
jjm*_*elo -1
关于你原来的问题:似乎没有这样的事情。但是,编码的代码已更改,现在您可以注册新的编码并检查现有的编码;这些列表也可用编码。
\n还有一个函数 ,find
它返回一个编码对象(如果存在):
say Encoding::Registry.find(\'oh-no\'); \n# OUTPUT: \xc2\xab(exit code 1) Unknown string encoding \'oh-no\'\xe2\x90\xa4\xc2\xbb\nsay Encoding::Registry.find(\'latin1\'); \n#OUTPUT: \xc2\xabEncoding::Builtin.new(name => "iso-8859-1")\xe2\x90\xa4\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n现在已经记录了相应的类。
\n 归档时间: |
|
查看次数: |
224 次 |
最近记录: |