Board logo

标题: [其他] 批处理如何实现ascii/中文字符转换unicode码 [打印本页]

作者: aa768228    时间: 2016-7-26 00:27     标题: 批处理如何实现ascii/中文字符转换unicode码

bat批处理汉字ascii转换unicode编码
比如这样
作者: pcl_test    时间: 2016-7-26 03:52

本帖最后由 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. }
复制代码

作者: aa768228    时间: 2016-7-26 07:45

回复 2# pcl_test


    大哥,转换不行,还是原来的字符。
作者: 523066680    时间: 2016-7-26 09:15

回复 3# aa768228


    楼主换一种脚本语言,一两句话就能做的事
作者: pcl_test    时间: 2016-7-26 09:38

回复 3# aa768228

直接将代码保存为bat文件运行,“批处理之家”这几字没转换?如果能转换,那就是你操作不对,看代码中的注释修改
作者: aa768228    时间: 2016-7-26 09:41

回复 4# 523066680


    换什么?求给个
作者: 523066680    时间: 2016-7-26 11:32     标题: Perl/Ruby/Python 都可以轻松实现

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


作者: codegay    时间: 2016-7-27 12:14

python3 中用内置函数ord可以返回一个字的unicode值。
用str转为字符串,前面再加&# ,结尾加上;
就可以得到一样的结果。
  1. >>> ord("百")
  2. 30334
  3. >>> str(ord("百"))
  4. '30334'
  5. >>> ord('百')
  6. 30334
  7. >>> '&#' + str(ord('百')) + ';'
  8. '百'
复制代码

作者: codegay    时间: 2016-7-27 12:24

本帖最后由 codegay 于 2016-7-27 12:27 编辑

python3 一行流
  1. >>> ''.join(map('&#{};'.format,map(str,map(ord,'批睡理之家'))))
复制代码

作者: ai20110304    时间: 2016-8-1 21:53

:victory:
作者: wskwfkbdn    时间: 2016-8-7 22:59

这个人在群里问了,我说给他50元开发个命令行程序,结果啰嗦白天,到最后不说话了,写不写也不说,我就自己琢磨出来了并写了个命令行,然后q这个人,最终还是没有回应,我也就算了,我想说做人要有始有终,不做就不做啦,何必浪费时间跟我啰嗦半天呢!起码回应一声说不弄了不想花钱来论坛问问也行啊,费劲不讨好的事情,以后我保证不干了。表达完毕!
作者: ainibau    时间: 2018-1-23 23:26     标题: ascii/中文批量转换unicode编码的问题

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

但是对我来讲有个问题,

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

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

能处理有红包。或者价格好议。
作者: pcl_test    时间: 2018-1-25 01:15

回复 12# ainibau

已修改
作者: 520bats    时间: 2021-12-11 12:51

版主的代码 文本是ANSI格式的 出来会乱码
请问下 文本是UFT-8格式的怎么修改? 内容是泰文 也不能用 ANSI的文本格式来保存。




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