Board logo

标题: [原创代码] Perl版汉字批量转UTF-8编码[纯编码] [打印本页]

作者: PakTC    时间: 2013-7-29 17:55     标题: Perl版汉字批量转UTF-8编码[纯编码]

本帖最后由 CrLf 于 2015-7-9 01:26 编辑

保存脚本的时候须为utf-8格式。
  1. #!/usr/bin/perl
  2. #Code by Paktc
  3. #2010-09
  4. $lv_[1]=00000000;
  5. $lv_[2]=11000000;
  6. $lv_[3]=11100000;
  7. $lv_[4]=11110000;
  8. $lv_[5]=11111000;
  9. $lv_[6]=11111100;
  10. use utf8;
  11. $a="千与千寻";
  12. $L=length($a)-1;
  13. for $i (0..$L) {
  14.     $b=$i;
  15.     printf "%s %s\n",&code2utf(ord(substr($a,$i,2)));
  16. }
  17. print "END!";
  18. <STDIN>;
  19. sub code2utf {
  20.     my ($code,$bin,$level,$hex,$tmp,$result);
  21.     $code=$_[0];
  22.     $bin=sprintf "%b",$code;
  23.     $level=1;
  24.     if (length($bin)>7) {
  25.         while (length($bin)>=6) {
  26.             $level+=1;
  27.             $bin=~s/.{6}$//;
  28.             $hex=sprintf "%X",&bin2int(10 . $&);
  29.             $result=$hex ."-". $result;
  30.         }
  31.     }
  32.     $tmp=substr($lv_[$level],0,8-length($bin));
  33.     $hex=sprintf "%X",&bin2int($tmp . $bin);
  34.     $result=$hex ."-". $result;
  35.     $result=~s/-$//;  
  36.     $result;   #result - string
  37. }
  38. sub bin2int {
  39.     my ($a,$str,$all,$act);
  40.     $a=$_[0];
  41.     $str="";
  42.     $all=0;
  43.     $act=0;
  44.     do {
  45.         $b=($a % 10) * (2**$act);  #** as ^ of the calc
  46.         $all+=$b;
  47.         $act+=1;
  48.         $a=int ($a/10);
  49.     } until ($a==0);
  50.     int ($all);
  51. }
复制代码
输出
E5-8D-83
E4-B8-8E
E5-8D-83
E5-AF-BB
END!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2