Board logo

标题: [文本处理] [已解决]有办法实现用批处理转换txt文本的编码为指定国家或地区的编码吗? [打印本页]

作者: 867258173    时间: 2015-7-10 00:12     标题: [已解决]有办法实现用批处理转换txt文本的编码为指定国家或地区的编码吗?

本帖最后由 pcl_test 于 2016-9-14 19:20 编辑

比如我们当前使用的txt格式默认是
简体中文:GB2312

而我想在繁体或日文其它国家内码编辑并打开:
繁体中文:Big5
日语:shift-jis

若直接打开其他国家默认格式文档,就会提示乱码。是否能切换打开?

PS:编辑器就别说了。最多只能转TXT格式,却无法转内容格式?

另外能调用转码工具的参数来实现bat转区打开吗?
  1. ntlea全域通
  2. Locale.Emulator
复制代码
这是两款最受欢迎的转区工具,理论能调用这两款软件参数来实现。希望大家都来测试下。

举个列子:
这是在当前中文系统txt编辑内容:
简体中文:GB2312
  1. 这是一个问题。
复制代码
这是在转日区显示:
日语:shift-jis
  1. ユ簗ヌメサクハフ筍」
复制代码
这是在繁体(台湾)显示:
繁体中文:Big5
  1. 涴岆珨跺恀枙﹝
复制代码
倒过来编辑也是一样,也就是不同国家TXT默认编码不同?无法在本地国家直接打开其他地区TXT编码。如今需要就是能够互换这些不同国家编码的TXT?方便查看和编辑......

希望大家共同来思考如何实现这个功能.....
作者: Demon    时间: 2015-7-10 09:36

记事本:怪我咯?
作者: 9zhmke    时间: 2015-7-10 20:12

繁体可以转码,汉字转成英文或其他国家语言只能用翻译软件?

要通用性强还是用UTF8吧
作者: CrLf    时间: 2015-7-10 22:21

问题是你怎么识别?这些编码很多都没有文件头
作者: CrLf    时间: 2015-7-11 01:37

本帖最后由 CrLf 于 2015-7-11 01:44 编辑

运行后选择文件和编码时自动转码,对有文件头的文件强制按文件头读取
  1. <!-- :
  2. @start mshta "%~f0" & exit /b
  3. -->
  4. <script src=http://www.bathome.net/lib/diy/Libs.js></script>
  5. <script>
  6. var libs = ['Prototype','WSH','Function','DIYprototype','iconv','list']
  7. for(var i in libs)Libs.get(libs[i])
  8. </script>
  9. <input type="file" id=filePath onchange=typefile() style="width:700px;float:left" />
  10. <select id=charSet onchange=typefile() style="float:right"></select>
  11. <br /><br />
  12. <textarea id=textarea style="width:100%;height:90%" ></textarea>
  13. <script>
  14. var charsetList = list.charset()
  15. charsetList._each(function(e){
  16. var o = new Option(e,e)
  17. charSet.add(o)
  18. if(e=='gb2312')o.selected = true
  19. })
  20. function typefile(){
  21. var bin = iconv.load(filePath.value)
  22. charset = iconv.checkBom(bin) ? charSet.options[charSet.selectedIndex].value : iconv.checkBom(bin)
  23. textarea.value = iconv.toStr(bin,charset)
  24. }
  25. </script>
复制代码

作者: 867258173    时间: 2015-7-11 10:03

回复 5# CrLf


    谢谢。这个能直接选择查看,不能在选单添加国家名吗?这样使用起来方便些。
作者: 867258173    时间: 2015-7-11 10:18

回复 2# Demon
   _(:зゝ∠)_ 记事本确实不方便,每次转编码编辑,保存。都会提示错误。
  1. ???
复制代码
再打开变成这样。
回复 3# Demon
UTF-8确实通用,但其他国家,包括我们难道还每次用TXT编辑文本,还要再次转UTF-8再保存,估计没多少人这么做。因为这样太麻烦,花时间。所以其他国家编辑TXT多数和我们一样,使用地区默认编码来编辑。
回复 4# Demon
  1. @echo off
  2. echo  转日文:shift-jis
  3. "E:\Locale.Emulator.1.4.1.0\LEProc.exe"  "E:\测试.txt" "C932" "L1041" "T-540"
  4. echo 转繁体中文:Big5
  5. "E:\Locale.Emulator.1.4.1.0\LEProc.exe" "E:\测试.txt" "C949" "C950" "L1028" "T-480"
复制代码
自己通过Locale.Emulator转区软件调用参数,使用批处理做了个能实现互转国家编码功能,不过每次都得手动编辑TXT路径。还有转其他国家,日语,繁体后。再使用TXT保存,就会提示错误。下次再转编码打开。就会变成???。
OTL 这个和你上面的都只能查看,不能编辑。不,这个能编辑,但TXT默认编码有的文字不支持。导致在别的国家编码保存导致失败。而转区软件必须是本地TXT编码才能转换,改成其他编码再调用转换,参数就失效了。
不知你能不能看看是否能做个不只能查看且能编辑保存的bat呢?
作者: CrLf    时间: 2015-7-11 18:02

本帖最后由 CrLf 于 2015-7-12 04:31 编辑

回复 7# 867258173


ctrl+s 将结果以指定编码保存到原文件,更多语言在注释处自己加,界面不好看请自行改良:
  1. <!-- :
  2. @start mshta "%~f0" & exit /b
  3. -->
  4. <script src=http://www.bathome.net/lib/diy/Libs.js></script>
  5. <script>
  6. var libs = ['Prototype','WSH','Function','iconv']
  7. for(var i in libs)Libs.get(libs[i])
  8. </script>
  9. <input type="file" id=filePath onchange=typefile() style="width:700px;float:left" />
  10.   原编码:<select id=charSetIn onchange=typefile()></select>
  11.   新编码:<select id=charSetOut onchange=savefile()></select>
  12. <br /><br />
  13. <textarea id=textarea style="width:100%;height:90%" ></textarea>
  14. <script>
  15. var list = [
  16. {text:'简体中文',value:'gb2312'},
  17. {text:'繁体中文',value:'big5'},
  18. {text:'日语',value:'shift-jis'},
  19. {text:'utf-8',value:'utf-8'},
  20. {text:'unicode',value:'utf-7'}
  21. //依此类推,要什么自己加
  22. ]
  23. list._each(
  24. function(o){
  25. charSetIn.add(new Option(o.text,o.value)),charSetOut.add(new Option(o.text,o.value))
  26. }
  27. )
  28. document.onkeydown = function(e){
  29. if(event.ctrlKey&&event.keyCode==83)savefile()
  30. }
  31. function typefile(){
  32. document.title = filePath.value + ' *'
  33. var bin = iconv.load(filePath.value)
  34. charset = iconv.checkBom(bin) ? charSetIn.options[charSetIn.selectedIndex].value : iconv.checkBom(bin)
  35. textarea.value = iconv.toStr(bin,charset)
  36. }
  37. function savefile(){
  38. if(/\*$/.test(document.title)){
  39. var fso = newcom('Scripting.FileSystemObject')
  40. var tmpFile = fso.GetTempName()
  41. iconv.saveText(
  42. textarea.value,
  43. tmpFile,
  44. charSetOut.options[charSetOut.selectedIndex].value
  45. )
  46. fso.CopyFile(tmpFile,filePath.value,true)
  47. fso.DeleteFile(tmpFile,true)
  48. document.title = filePath.value
  49. }
  50. }
  51. </script>
复制代码
妈了个鸡,试了一下午才明白 adodb.stream 出错的原因是不能写入被 input file 选中的文件,ado 真差劲
作者: 867258173    时间: 2015-7-12 00:05

本帖最后由 867258173 于 2015-7-12 00:10 编辑

回复 8# CrLf


今日辛苦了,代码这样就行了,剩下其他语言编码我自己添加就好
作者: CrLf    时间: 2015-7-12 16:29

回复 10# tigerpower


--> 之后加一句
  1. <meta charset=gb2312>
复制代码
或存为 utf-8 编码的 hta 文件运行




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