2015-12-02 61 views
1

我使用Perl在PDF報告上打印文本。數據來自oracle數據庫表。如果字符串長度超過此大小,我想截斷字符串到特定大小。我嘗試使用substr函數,但它似乎是以字符計算的。我想計算佔用的空間。這是我的嘗試:在Perl中截斷字節的字符串

$field_str .= ($totalwidth < 210) ? ' ' : "\n"; 
$field_str_trunc = substr($field_str, 0, 278); 

這個工作正常,當數據是全部大寫的;但是,當我將它設置爲小寫並添加了更多數據時,沒有足夠的數據顯示在PDF上。我怎樣才能做到這一點?

+2

字符串的每個元素都是一個字符。這些字符可以是字節,Unicode代碼點或其他任何內容。 ///這聽起來像你有一串Unicode代碼點,並且它想要限制其UTF-8編碼的大小。你沒有對字符串進行UTF-8編碼,因此得到這是你需要做的第一件事。 – ikegami

+2

這聽起來像你想截斷整個字符串的特定圖形長度(以像素或其他),而不是字節。每個字符的字節數相同(除了佔用2個字節的特殊字符,但通常所有字符都是單個字節)。這並不意味着它們都是相同的圖形長度 - 這取決於字體。你可以使用像Courier這樣的固定寬度的字體來解決這個問題。否則,您將不得不檢索字體細節以計算長度。 – hepcat72

回答

-1

您需要bytes編譯:

use utf8; 
my $str = "фуу"; 
my $chars = length($str);  # 3 
{ 
    use bytes; 
    my $bytes = length($str); # 6 
}