将普通字母转换为宽字符

问题描述 投票:0回答:1

如何将

perl
半角转换为全角形式?用
perl
的话说,就是从普通字符到宽字符。

例如,从

!abc ABC!
!abc ABC!
。 从算术上看,以下应该是正确的

binmode STDOUT, ":utf8";

$letter = 'A';
$lw = chr($letter + 0xfee0);
print "Hello $lw ($letter)!\n";

但是打印出来的结果不是我想要的,应该是

Hello A (A)!

perl utf-8
1个回答
6
投票

如果您使用了

use warnings
,您将会收到一条警告,表明您的添加失败:

参数“A”在...处加法 (+) 不是数字

这意味着您的字母

'A'
在相加之前会被转换为数字,在本例中为
0
。您可以通过删除
$letter +
并运行
chr()
中的数字来验证这一点。

您可以通过修复逻辑来解决您的问题:

my $lw = chr(ord($letter) + 0xfee0);

先把字母变成数字(

ord()
),然后做加法。

请注意,为了避免像这样的简单错误,您应该始终使用这些编译指示:

use strict;
use warnings;
© www.soinside.com 2019 - 2024. All rights reserved.