我试图找出在Perl v5.8.5中使用substr
时出现问题。下面是一个例子的字符串:在Perl中的substr,削减utf8字符的一半
טובבגןUTF-8实施例עץטובבגןいろはにほξεσκεπάζωFF
if (length($hit->{post_title}) > 60) {
$hit->{post_title} = substr($hit->{post_title},0,60);
$hit->{post_title} .= "...";
}
似乎得到修整以:
UTF-8实施例עץטובבגןいろはにほξεσεε ...
在代码中,我看到一个关于宽字符的消息。我想知道substr
是否可以把这个词分成两半?如果我删除代码的substr()
部分,那么字符串显示正常。
我从来没有遇到过这与UTF8之前。我们需要用阿拉伯字符做一些特别的事吗?
更新:如果我检查字符串的前的长度后,一些时髦似乎是想在:
TEST:UTF-8的例子עץטובבגןいろはにほξεσκεπάζω
长度:63 长度:67之后
我只是不确定是什么! FWIW,我也在脚本的标题中使用这个:
use utf8;
谢谢!
可以试试这个'使用open':encoding(utf8)'; binmode STDOUT,':utf8';' – ssr1012
@ ssr1012 - 谢谢,但这似乎使情况变得更糟(破坏了编码:'UTF-8示例××××××××××ãããã«ÎÎÎμÏκÎμÏ' ) –
你的字符串从哪里来?如果正在从文件读取数据,则在读取文件时,您需要将数据解码为Perl字符。如果它是你的源代码的一部分,你需要在程序中添加'use utf8',这样Perl就知道它是UTF-8。在这两种情况下,您都希望在打印字符之前将字符编码为UTF-8,并告诉输出文件句柄预期UTF-8数据。有关详细信息,请参阅(perlunitut)[http://perldoc.perl.org/perlunitut.html]。 –