在NOTE节点中使用多字节UTF-8字符时,换行符周围的字符会出现乱码/丢失。
例如:
$vcard = $address_book->add_vcard();
$vcard->version('3.0');
$vcard->FN('Tèśt Ûšér');
$vcard->NOTE('①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳');
say $vcard->as_string();
产地:
BEGIN:VCARD
VERSION:3.0
FN:Tèśt Ûšér
NOTE:①②③④⑤⑥⑦⑧⑨⑩⑪��
�⑬⑭⑮⑯⑰⑱⑲⑳①②③④
⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯�
��⑱⑲⑳①②③④⑤⑥⑦⑧��
�⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①
②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬�
��⑮⑯⑰⑱⑲⑳
END:VCARD
如何修复此问题?我还将其发布为an issue on the text-vcard project page。我认为这与新行的插入方式有关(通过插入原始字节:\ x0D \ x0A),但我不确定。
答案 0 :(得分:1)
看起来罪魁祸首是Text :: vCard :: Node-> _wrap_utf8()。我至少可以通过绕过这种方法来阻止字符切割。
sub _wrap_utf8 {
my ( $self, $key, $value, $max, $newline ) = @_;
#bypass wrapping
return $key . $value;
…
}