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»