我需要使用perl编程将非ASCII字符转换为Unicode值:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
= \ U + 1D6B2(&#x1D6B2)......
上面的字符是双击或fraktur但是我无法将它们转换为Unicode值。如果有任何可用的模块,请指出。
有人可以帮我解决这个问题。
my @arry = qw( );
foreach my $sng(@arry)
{
my $newsng = ord($sng);
#print "$sng\t$newsng\t";
$newsng = sprintf("%x", $newsng);
#print "$newsng\n";
$incnt=~s/$sng/$newsng/esg || print "NOT: $sng\n";
}
print $incnt;
它不打印unicode值。
答案 0 :(得分:2)
您需要确保您的程序期望输入为utf8字节,并且输出文件句柄期望接收utf8字节。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
# Automatically decode data from filehandles
use open ':encoding(utf8)';
# Tell STDOUT we'll be writing utf8
binmode STDOUT, ':utf8';
open my $utf8_fh, '<', 'utf8.txt' or die $!;
while (<$utf8_fh>) {
chomp;
foreach my $c (split) {
printf "$c: %x\n", ord($c);
}
}
输出:
: 1d49c
: 1d49e
: 1d49f
: 1d4a2
: 1d4a5
...
答案 1 :(得分:1)
use utf8;
use feature 'unicode_strings';
printf "%x\n", ord('');
# => 1D6B2
有关Perl中Unicode的更多详细信息:perlunicode。