找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 16063|回复: 0

[原创代码] Perl版汉字批量转UTF-8编码[纯编码]

[复制链接]
发表于 2013-7-29 17:55:56 | 显示全部楼层 |阅读模式
本帖最后由 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!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 06:43 , Processed in 0.016462 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表