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

bri*_*foy 7 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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

jjm*_*elo -1

关于你原来的问题:似乎没有这样的事情。但是,编码的代码已更改,现在您可以注册新的编码并检查现有的编码;这些列表也可用编码

\n

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

\n
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