将非Ascii转换为unicode字符

时间:2015-10-16 06:00:32

标签: perl

我需要使用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值。

2 个答案:

答案 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