如何获得Perl 6可以理解的编码列表?

时间:2017-01-02 21:08:14

标签: encoding perl6

我在 /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)
        }
    }

1 个答案:

答案 0 :(得分:-1)

关于您最初的问题:似乎没有这样的事情。但是,编码代码已更改,现在您可以register new encodings and check existing ones; those lines also available encodings

还有一个find函数,如果存在则返回一个编码对象:

say Encoding::Registry.find('oh-no'); 
# OUTPUT: «(exit code 1) Unknown string encoding 'oh-no'␤»
say Encoding::Registry.find('latin1'); 
#OUTPUT: «Encoding::Builtin.new(name => "iso-8859-1")␤»
但是,没有记录

Encoding::Registry,而只是将其命名为Encoding角色的一部分。我已经注册this issue进行记录。