In Str§

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

multi method encode(Str:D $encoding = 'utf8':$replacementBool() :$translate-nl = False:$strict)

返回一个Blob,它表示给定编码和标准形式中的原始字符串。实际的返回类型尽可能具体,因此$str.encode('UTF-8')返回一个utf8对象,$str.encode('ISO-8859-1')返回一个buf8。如果将:translate-nl设置为True,它将把换行符从\n转换为\r\n,但仅在 Windows 中。$replacement指示在当前编码中不可用时如何替换字符,而$strict指示未映射的代码点是否仍将解码;例如,在windows-1252中不存在的代码点 129。

my $str = "Þor is mighty";
say $str.encode("ascii":replacement'Th') ).decode("ascii");
# OUTPUT: «Thor is mighty␤»

在这种情况下,任何未知字符都将被Th替换。我们事先知道在ascii编码中未知的字符是Þ,因此我们用它的拉丁语等价词Th替换它。在没有替换字符集的情况下,:replacement被理解为Bool

say $str.encode("ascii":replacement).decode("ascii"); # OUTPUT: «?or is mighty␤» 

如果未设置:replacement或未为其分配值,则会发出错误Error encoding ASCII string: could not encode codepoint 222(在这种情况下,因为 þ 是代码点 222)。

由于encode返回的Blob是标准形式的原始字符串,并且Blob的每个元素都是一个字节,因此您可以通过调用返回Blob大小的方法来获取字符串的字节长度

say "þor".encode.bytes# OUTPUT: «4␤» 
say "þor".encode.elems# OUTPUT: «4␤»