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

[其他] 批处理如何实现ascii/中文字符转换unicode码

[复制链接]
发表于 2016-7-26 00:27:16 | 显示全部楼层 |阅读模式
bat批处理汉字ascii转换unicode编码
比如这样
发表于 2016-7-26 03:52:01 | 显示全部楼层
本帖最后由 pcl_test 于 2018-1-24 14:35 编辑

保存为bat文件运行
  1. //&cls&cscript -nologo -e:jscript "%~f0" "批处理之家"&pause&exit

  2. /*
  3. 用法:
  4. 一、转换文件
  5. 1、指定某个文件 //&cls&dir /a-d/b "指定文本.txt"|cscript -nologo -e:jscript "%~f0"&pause&exit
  6. 2、多个文件 //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  7. 二、转换字符串
  8. //&cls&cscript -nologo -e:jscript "%~f0" "需转换的字符串"&pause&exit
  9. */

  10. var pattern=1;    //设置转换模式

  11. /*
  12. 1为ASCII转Unicode(举->举),2为Unicode转ASCII(个->个),
  13. 3为中文转Unicode(栗->\u6817),4为Unicode转中文(\u5b50->子)
  14. */

  15. var crlf=0;     //是否转换回车换行符,1为是,0为否

  16. if(!/^[1-4]$/.test(pattern) || !/^[01]$/.test(crlf)){WSH.echo('参数有误!');WSH.quit()}
  17. var fso = new ActiveXObject('Scripting.Filesystemobject');

  18. if(WSH.Arguments.length<1){
  19.     while(!WSH.StdIn.AtEndOfStream){
  20.         try{
  21.             var file = WSH.StdIn.ReadLine();
  22.             var f = fso.OpenTextFile(file, 1);
  23.             var txt = f.ReadAll();
  24.             f.Close();
  25.             var f = file.replace(/(.+\\)?([^\\]+)/, '$1$New_$2');
  26.             fso.CreateTextFile(f, 2).Write(Choice(txt));
  27.         }catch(e){}
  28.     }
  29.     WSH.echo('Done');
  30. }else WSH.Echo(Choice(WSH.Arguments(0)));

  31. function Choice(txt){
  32.     switch(pattern){
  33.         case 1: return AsciiToUnicode(txt);break;
  34.         case 2: return UnicodeToAscii(txt);break;
  35.         case 3: return HanziToUnicode(txt);break;
  36.         case 4: return UnicodeToHanzi(txt);break;
  37.     }
  38. }

  39. function AsciiToUnicode(txt){
  40.     var s='';
  41.     for (var i=0; i<txt.length; i++){
  42.         var num=txt.charCodeAt(i);
  43.         if(!crlf && (num==10 ||num==13)){
  44.             s += String.fromCharCode(num);
  45.         }else s += '&#'+num+';';
  46.     }
  47.     return s;
  48. }

  49. function UnicodeToAscii(txt) {
  50.     return txt.replace(/(&#)(\d+);/gi,function($0){return String.fromCharCode(parseInt(escape($0).replace(/(%26%23)(\d+)(%3B)/g,"$2")));});
  51. }

  52. function HanziToUnicode(txt){
  53.     var s='';
  54.     for (var i=0; i<txt.length; i++){
  55.         var num=txt.charCodeAt(i);
  56.         if(!crlf && (num==10 ||num==13)){
  57.             s += String.fromCharCode(num);
  58.         }else s += '\\u' + ('00'+parseInt(num).toString(16)).slice(-4);
  59.     }
  60.     return s;
  61. }

  62. function UnicodeToHanzi(txt){
  63.     return txt.replace(/(\\u)(\w{1,4})/gi,function($0){return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{1,4})/g,"$2")),16)));});
  64. }
复制代码
发表于 2016-7-26 07:45:31 | 显示全部楼层
回复 2# pcl_test


    大哥,转换不行,还是原来的字符。
发表于 2016-7-26 09:15:36 | 显示全部楼层
回复 3# aa768228


    楼主换一种脚本语言,一两句话就能做的事
发表于 2016-7-26 09:38:43 | 显示全部楼层
回复 3# aa768228

直接将代码保存为bat文件运行,“批处理之家”这几字没转换?如果能转换,那就是你操作不对,看代码中的注释修改
发表于 2016-7-26 09:41:58 | 显示全部楼层
回复 4# 523066680


    换什么?求给个
发表于 2016-7-26 11:32:22 | 显示全部楼层

Perl/Ruby/Python 都可以轻松实现

本帖最后由 523066680 于 2016-7-26 11:33 编辑

  • use Encode;
  • my $src = decode('utf8', "百度站长工具");
  • $src =~s /(.)/sprintf("\&\#%d;", ord($1))/ge;
  • print $src;
发表于 2016-7-27 12:14:25 | 显示全部楼层
python3 中用内置函数ord可以返回一个字的unicode值。
用str转为字符串,前面再加&# ,结尾加上;
就可以得到一样的结果。
  1. >>> ord("百")
  2. 30334
  3. >>> str(ord("百"))
  4. '30334'
  5. >>> ord('百')
  6. 30334
  7. >>> '&#' + str(ord('百')) + ';'
  8. '&#30334;'
复制代码
发表于 2016-7-27 12:24:23 | 显示全部楼层
本帖最后由 codegay 于 2016-7-27 12:27 编辑

python3 一行流
  1. >>> ''.join(map('&#{};'.format,map(str,map(ord,'批睡理之家'))))
复制代码
发表于 2016-8-1 21:53:10 | 显示全部楼层
:victory:
发表于 2016-8-7 22:59:30 | 显示全部楼层
这个人在群里问了,我说给他50元开发个命令行程序,结果啰嗦白天,到最后不说话了,写不写也不说,我就自己琢磨出来了并写了个命令行,然后q这个人,最终还是没有回应,我也就算了,我想说做人要有始有终,不做就不做啦,何必浪费时间跟我啰嗦半天呢!起码回应一声说不弄了不想花钱来论坛问问也行啊,费劲不讨好的事情,以后我保证不干了。表达完毕!
 楼主| 发表于 2018-1-23 23:26:16 | 显示全部楼层

ascii/中文批量转换unicode编码的问题

看了这篇帖子,版主的批处理确实可以用。http://www.bathome.net/thread-41155-1-5.html

但是对我来讲有个问题,

这个问题就是我TXT文本里面的文字多是分行的,批量转换后的unicode码是不分行,因为我这个TXT的内容是用来读取的,比如读取某一行,现在转换后成一堆了,直接就把转换后的TXT内容全读取了。不会像没转换之前的汉字是分行的,每次只读一行。

批处理能把TXT里面分行的汉字转换后unicode码也是按原先TXT的内容那样分行嘛?

能处理有红包。或者价格好议。
发表于 2018-1-25 01:15:37 | 显示全部楼层
回复 12# ainibau

已修改
发表于 2021-12-11 12:51:47 | 显示全部楼层
版主的代码 文本是ANSI格式的 出来会乱码
请问下 文本是UFT-8格式的怎么修改? 内容是泰文 也不能用 ANSI的文本格式来保存。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 16:33 , Processed in 0.022827 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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