在 IO::CatHandle 中§

有关方法编码,请参阅上下文中的主要文档

multi method encoding(IO::CatHandle:D:)
multi method encoding(IO::CatHandle:D: $new-encoding)

将调用者的 $.encoding 属性设置为提供的值。有效值与 IO::Handle.encoding 接受的值相同(使用值 Nil 切换到二进制模式)。所有源句柄(包括活动句柄)都将使用提供的 $.encoding 值。

(my $f1 = 'foo'.IO).spurt: 'I ♥ Raku';
(my $f2 = 'bar'.IO).spurt: 'meow';
with IO::CatHandle.new: $f1$f2 {
    # .encoding is 'utf8' by default: 
    .readchars(5).say# OUTPUT: «I ♥ R␤» 
 
    .encoding: Nil# switch to binary mode 
    .slurp.say# OUTPUT: «Buf[uint8]:0x<6B 75 6D 65 6F 77>␤» 
}

在 IO::Handle 中§

有关方法编码,请参阅上下文中的主要文档

multi method encoding(IO::Handle:D: --> Str:D)
multi method encoding(IO::Handle:D: $enc --> Str:D)

返回一个表示句柄当前使用的编码的 Str,默认为 "utf8"Nil 表示文件句柄当前处于二进制模式。指定可选的位置参数 $enc 会切换句柄使用的编码;指定 Nil 作为编码以将句柄置于二进制模式。

编码的接受值不区分大小写。可用的编码因实现和后端而异。在 Rakudo MoarVM 上,支持以下编码:

utf8
utf16
utf16le
utf16be
utf8-c8
iso-8859-1
windows-1251
windows-1252
windows-932
ascii

默认编码为 utf8,它会进行规范化为 Unicode NFC(规范化形式 C)。在某些情况下,您可能希望确保不进行规范化;为此,您可以使用 utf8-c8。在使用 utf8-c8 之前,请阅读Unicode:文件句柄和 I/O,以获取有关 utf8-c8NFC 的更多信息。

从 Rakudo 2018.04 开始,还支持 windows-932,它是 ShiftJIS 的一种变体。

实现可以选择支持别名,例如,Rakudo 允许使用别名 latin-1 表示 iso-8859-1 编码,并使用带连字符的 utf 版本:utf-8utf-16