- 论坛徽章:
- 0
|
楼上猛将兄呀:多谢啊!
不过我电脑上改成下边这样才好使
$str = encode("gb2312",$str);
|
之前我从Java里边修改的一段代码,也能搞定
看了大侠你的代码,我无地自容啊:
#!/usr/bin/perl
use strict;
use Encode;
my $unicode = '\u5468';
my $ret = loadConvert($unicode,0,length($unicode));
print $ret,"\n";
sub loadConvert{
my ($str,$indexFrom,$indexTo) = @_;
#print $str,"\n";
my @ac;
if (length($str) < $indexTo){
my $k = $indexTo * 2;
if ($k < 0) {$k = 2147483647;}
@ac = split(//," " x $k);
}
my @ac = split(//,$str);
my @ac2 = @ac;
my $l = 0;
for ( my $i1 = $indexFrom + $indexTo;$indexFrom < $i1;){
my $c = $ac[$indexFrom++];
if($c eq "\\"){
$c = $ac[$indexFrom++];
if(lc($c) eq "u"){
my $j1 = 0;
for(my $k1 = 0;$k1 < 4;$k1++){
$c = $ac[$indexFrom++];
# 0-9
if( $c =~ m/^\d$/){
$j1 = (($j1 << 4) + ord($c)) - 48;
}elsif( $c =~ m/^[a-f]$/){ # a-f
$j1 = (($j1 << 4) + 10 + ord($c)) - 97;
}elsif( $c =~ m/^[A-F]$/){ # A-F
$j1 = (($j1 << 4) + 10 + ord($c)) - 65;
}else{
print("Malformed \\uxxxx encoding.\n");
}
}
$ac2[$l++] = encode("gb2312",chr($j1));
#print encode("gb2312",chr($j1)),"\n";
}
else{
if ($c eq 't') {$c = '\t';}
elsif ($c == 'r') {$c = '\r';}
elsif ($c == 'n') {$c = '\n';}
elsif ($c == 'f') {$c = '\f';}
$ac2[$l++] = $c;
}
}else{
$ac2[$l++] = $c;
}
}
#return new String(ac2, 0, l);
#print $l,"\n";
return join "",@ac2[0..$l-1];
}
|
[ 本帖最后由 wangzhiyun 于 2009-3-18 17:18 编辑 ] |
|