In Str§
有关方法 encode,请参阅上下文中的主要文档
multi method encode(Str = 'utf8', :, Bool() : = False, :)
返回一个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 = "Þor is mighty";say .encode("ascii", :replacement( 'Th') ).decode("ascii");# OUTPUT: «Thor is mighty»
在这种情况下,任何未知字符都将被Th替换。我们事先知道在ascii编码中未知的字符是Þ,因此我们用它的拉丁语等价词Th替换它。在没有替换字符集的情况下,:replacement被理解为Bool
say .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»