如何用Perl实现半角字符到全角字符的转换?
Perl半角字符转全角字符(普通字符转宽字符)实现方案
你之前的代码问题出在直接对字符串'A'做数值运算时,Perl会将非数字字符串解析为0,导致0 + 0xfee0得到的字符并非预期的全角'A'。正确的做法是先通过ord()获取字符的Unicode码点,再进行偏移计算。
1. 单个字符的正确转换示例
binmode STDOUT, ":utf8"; my $letter = 'A'; my $lw = chr(ord($letter) + 0xfee0); print "Hello $lw ($letter)!\n";
执行后会输出符合预期的:Hello A (A)!
2. 批量字符串转换(含空格处理)
要实现!abc ABC!转!abc ABC!,需要注意半角空格的全角对应字符是Unicode码点0x3000(不是半角空格加0xfee0),需单独处理:
binmode STDOUT, ":utf8"; sub half_to_full { my $str = shift; # 匹配字母、数字及常见半角标点,转换为全角 $str =~ s/(\w|\d|[\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e])/chr(ord($1) + 0xfee0)/eg; # 半角空格替换为全角空格 $str =~ s/ /\x{3000}/g; return $str; } my $input = '!abc ABC!'; my $output = half_to_full($input); print "$output\n"; # 输出:!abc ABC!
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

