我搜索过这个问题,但所有的讨论都是围绕如何从字符串中删除“零宽度非连接”字符或用标准空格替换它。所以,我知道如何在给定的字符串中检测和删除它。 现在我的问题是如何在perl中打印这个字符串?我知道如何在Python和ruby中实现它,但它在perl中不起作用。 在红宝石中,我过去只是通过:
mystring.gsub!(/\s+/,'<200c>')
它工作正常。但是在Perl中遵循相同的方式,它不起作用。实际上我已尝试过以下内容,但它没有返回正确的输出:
$mystring =~ s/\s+/\x{200C}/g;
关键是我可以在Perl中检测到这个字符,但我无法打印它。关于这个问题的任何想法?
答案 0 :(得分:1)
为了正确编写包含utf8序列的字符串,您应该在该流上使用binmode()
。我建议您尝试binmode( STDOUT, ':utf8' );
,然后打印字符串。 length( $mystring )
函数可以帮助您判断字符串是否包含比可见字符更多的字符,并验证是否成功替换。