Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 在Perl中截断以字节为单位的字符串_Oracle_Perl - Fatal编程技术网

Oracle 在Perl中截断以字节为单位的字符串

Oracle 在Perl中截断以字节为单位的字符串,oracle,perl,Oracle,Perl,我正在使用Perl在PDF报告上打印文本。数据来自oracle数据库表。如果字符串长于某个特定大小,我想将其截断为该大小。我试着使用substr函数,但它似乎是用字符计算的。我想计算占用的空间。这是我的尝试: $field_str .= ($totalwidth < 210) ? ' ' : "\n"; $field_str_trunc = substr( $field_str, 0, 278 ); 当数据都是大写时,这种方法效果很好;然而,当我将其小写并添加更多数据时,PDF上显示的数

我正在使用Perl在PDF报告上打印文本。数据来自oracle数据库表。如果字符串长于某个特定大小,我想将其截断为该大小。我试着使用substr函数,但它似乎是用字符计算的。我想计算占用的空间。这是我的尝试:

$field_str .= ($totalwidth < 210) ? ' ' : "\n";
$field_str_trunc = substr( $field_str, 0, 278 );
当数据都是大写时,这种方法效果很好;然而,当我将其小写并添加更多数据时,PDF上显示的数据不足。我如何才能做到这一点?

您需要pragma:

使用utf8; 我的$str=ффа; my$chars=长度$str;3. { 使用字节; my$bytes=长度$str;6 }
字符串的每个元素都是一个字符。这些字符可以是字节、Unicode代码点或其他任何字符听起来好像您有一个Unicode代码点字符串,希望限制其UTF-8编码的大小。您没有对字符串进行UTF-8编码,因此首先需要做的是获取该字符串。听起来您希望在整个字符串的特定图形长度(以像素或其他任何单位为单位,而不是以字节为单位)处截断。除占用2字节的特殊字符外,每个字符的字节数相同,但通常所有字符都是一个字节。这并不意味着它们都是相同的图形长度——这取决于字体。你可以使用像Courier这样的固定宽度字体来解决这个问题。否则,您必须检索字体详细信息才能计算长度。