我試圖找出在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]。 –