涉及使用特殊字符时打印宽字符
Wide character in print when involve using special characters
我想用点 .
字符拆分一个长句,只要点不包含在任何类型的括号中,如 ()、()、【】、〔〕等。左边至少应该有三个字。我使用以下代码。但它给出了 Wide character in print
错误。
my $a = "hi hello world. "
$a .= "【 hi hello world. 】";
my @list = split /(?<!\.)(?<=(?:[\w'’]{1,30} ){2}[\w'’]{1,30})\. (?![^()〈〉【】()\[\]〔〕\{\}]*[\))\]〉】〕\}])/, $a;
预期的结果是 $a 拆分为:
hi hello world
和
【 hi hello world. 】
我在 macOS Big Sur 上使用 perl v5.31.3。
p.s。在项目中,我也在使用 XML::LibXML::Reader
。我不确定是否允许添加 use utf8::all;
。
解码你的输入,编码你的输出
此警告是由于您尝试将字节以外的内容写入文件句柄[1]。
您需要显式地或通过向文件句柄添加编码层来对输出进行编码。
use open ':std', ':encoding(UTF-8)';
如果您的源代码使用 UTF-8 编码,您需要使用 use utf8;
告诉 perl
。否则,它假定源代码使用 ASCII 编码。[2]
如果您接受参数,这些也是需要解码的输入。您可以使用以下内容:
use Encode qw( decode_utf8 );
@ARGV = map { decode_utf8($_) } @ARGV;
为此,一个字节是介于 0 和 255 之间的值(含 0 和 255)。由于我们在谈论打印,所以我们在谈论具有这样一个值的字符(也就是字符串元素)。
虽然字符串和正则表达式文字是 8 位干净的。
我想用点 .
字符拆分一个长句,只要点不包含在任何类型的括号中,如 ()、()、【】、〔〕等。左边至少应该有三个字。我使用以下代码。但它给出了 Wide character in print
错误。
my $a = "hi hello world. "
$a .= "【 hi hello world. 】";
my @list = split /(?<!\.)(?<=(?:[\w'’]{1,30} ){2}[\w'’]{1,30})\. (?![^()〈〉【】()\[\]〔〕\{\}]*[\))\]〉】〕\}])/, $a;
预期的结果是 $a 拆分为:
hi hello world
和
【 hi hello world. 】
我在 macOS Big Sur 上使用 perl v5.31.3。
p.s。在项目中,我也在使用 XML::LibXML::Reader
。我不确定是否允许添加 use utf8::all;
。
解码你的输入,编码你的输出
此警告是由于您尝试将字节以外的内容写入文件句柄[1]。
您需要显式地或通过向文件句柄添加编码层来对输出进行编码。
use open ':std', ':encoding(UTF-8)';
如果您的源代码使用 UTF-8 编码,您需要使用 use utf8;
告诉 perl
。否则,它假定源代码使用 ASCII 编码。[2]
如果您接受参数,这些也是需要解码的输入。您可以使用以下内容:
use Encode qw( decode_utf8 );
@ARGV = map { decode_utf8($_) } @ARGV;
为此,一个字节是介于 0 和 255 之间的值(含 0 和 255)。由于我们在谈论打印,所以我们在谈论具有这样一个值的字符(也就是字符串元素)。
虽然字符串和正则表达式文字是 8 位干净的。