推 bmyone:可以了~謝謝 06/03 11:20
※ 引述《bmyone (Y)》之銘言:
: 我有試過先加use utf8;
: 不過輸出的結果還是會有錯誤
: 最後一個字可能會變亂碼之類的
: 請問各位前輩們,有什麼比較好的做法嗎?
可以使用 Encode 來處理,這樣計算長度的單位是用 character 而不是 byte。
建議 #perldoc perlunitut 閱讀一下說明。
或參考下面的程式看看
----------------------------------------------------------------------
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use Data::Dump;
my $str = "123漢字abc一二三";
print 'length - ', length($str), " bytes\n";
print 'length - ', length(decode("utf-8", $str)), " characters\n";
print 'substr($str, 0, 2) - ', substr($str, 0, 2), "\n";
print 'substr($str, 0, 3) - ', substr($str, 0, 3), "\n";
print 'substr($str, 0, 4) - ', substr($str, 0, 4), "\n";
print 'substr($str, 0, 5) - ', substr($str, 0, 5), "\n";
print 'substr($str, 0, 6) - ', substr($str, 0, 6), "\n";
print 'substr($str, 0, 4) - ', encode("utf-8",
substr(decode("utf-8", $str), 0, 4)
), "\n";
print Data::Dump->dump($str), "\n";
print Data::Dump->dump(decode("utf-8", $str)), "\n";
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.64.233.69