Board logo

标题: 命令行编解码工具coder.exe 2.0 [打印本页]

作者: went    时间: 2021-1-9 18:43     标题: 命令行编解码工具coder.exe 2.0

对写的字符串处理函数进行了封装,提供以下功能:
    1.编码转换
    2.文件编码查看
    3.URL编解码
    4.base64编解码
    5.md5,sha1,crc32计算
    6.进制编解码 [2-36]进制,支持[文件|字符串|数字]
    以上功能均支持处理字符串和文件,可能会增加新功能
1.10添加功能,查看文件编码
1.11添加功能,支持管道
2.1修复对大文件进行编码转换时数据丢失问题
2.1添加功能:获取文件和字符串MD5值
10.13支持以下编码任意互转,智能转换 [ ANSI | UTF-8 | UTF-8_BOM | UTF-16_BE | UTF-16_LE ]
10.20加入SHA1和CRC32值
2022.1.26 添加功能,数据进制编解码(2进制,10进制,16进制)
2022.11.17 进制工具扩展到 [2-36],'0'-'Z'
2022.2.22 URL编码支持选择全编码(eca)和仅编码非ansi字符(ec)

使用方法:
  1. 编码解码工具 2.0.1 (Written By went.)
  2. coder.exe 用法:
  3.   显示帮助   /?
  4.   转换工具   -c       <auto|cp1> <cp2> -<s|f>         [ ... ]
  5.              -convert <auto|cp1> <cp2> -<string|file> [ ... ]
  6.   查看编码   -s       -a        <gc|gh>            -<s|f>             [ ... ]
  7.              -show    -action   <getcoder|gethash> -<string|file>     [ ... ]
  8.   进制工具   -r       <2...36>  <dc|ec>            -<s|f|n>           [ ... ]
  9.              -radix   <2...36>  <decode|encode>    -<string|file|num> [ ... ]
  10.   url工具    -u       -a        <dc|ec|eca>        -<s|f>             [ ... ]
  11.              -url     -action   <decode|encode>    -<string|file>     [ ... ]
  12.   base64工具 -bs64    -a        <dc|ec>            -<s|f>             [ ... ]
  13.              -base64  -action   <decode|encode>    -<string|file>     [ ... ]
  14.   备注:
  15.         1. [ ... ] 可选值 [<字符串|文件路径>|管道]
  16.         2. cp1,cp2 可选值 参见例子1
  17.         3. 大多数情况下,unicode编码即UTF-16_LE编码
  18.   例子:
  19.   coder -s -a gc -f "0.txt"
  20.          查看文件编码 [ ANSI | UTF-8 | UTF-8_BOM | UTF-16_BE | UTF-16_LE ]
  21.   coder -s -a gh -f "coder.exe"
  22.          获取文件哈希值(MD5,SHA1,CRC32)
  23.   coder -c ansi utf-8 -s "你好,世界!"
  24.          字符串编码转换 ansi -> utf8 [浣犲ソ,涓栫晫!]
  25.   coder -c utf-8 ansi -f "utf8.txt"
  26.          文件编码转换 utf8 -> ansi
  27.          要生成文件请使用重定向符号 ">" ,参见16进制编解码的例子
  28.   coder -c auto ansi -f "1.txt"
  29.          文件编码转换,源编码自动识别 -> ansi
  30.   coder -r 16 ec -n 36:51uoct
  31.          36进制数字转16进制 51uoct -> 1234abcd
  32.   coder -r 10 ec -n 16:1234abcd
  33.          16进制数字转10进制 1234abcd -> 305441741
  34.   coder -r 2 ec -n 305441741
  35.          10进制数字转2进制 305441741 -> 10010001101001010101111001101
  36.   coder -r 16 ec -f "1.exe">"0.hex"
  37.          文件16进制编码
  38.   coder -r 16 dc -f "0.hex">"1.exe"
  39.          文件16进制解码
  40.   coder -u -a dc -s "%73%64%2F%E4%BD%A0%E5%A5%BD%21%2F%31%32%33"
  41.          字符串URL解码 [sd/你好!/123]
  42.   coder -bs64 -a ec -f "3.png" >"base64.txt"
  43.           文件base64编码,保存到base64.txt
  44.   coder -bs64 -a dc -f "base64.txt" >"4.png"
  45.           文件base64解码,生成4.png
  46.   使用管道输入,例子:
  47.   for %i in (*.png) do ( echo %i| coder -bs64 -a ec -f >"%i.txt" )
  48.        对当前路径下所有png文件base64进行编码,生成txt
复制代码
exe和源代码[attach]13066[/attach]
作者: went    时间: 2021-1-9 18:44

本帖最后由 went 于 2021-2-1 16:08 编辑

核心代码见附件
作者: netdzb    时间: 2021-1-9 22:19

回复 1# went

用汇编写的,太厉害了啊。
作者: went    时间: 2021-1-10 23:46

本帖最后由 went 于 2021-9-13 23:30 编辑

回复 4# went

当文件字节全是0-127范围内即每个最高位全是0时,文件ansi和utf8编码字节数据完全相同
为了方便其它程序处理,coder.exe把编码看成ANSI,和notepad显示有所不同
作者: luyigoog    时间: 2021-5-21 10:04

不错,学习一下 辛苦楼主了。
作者: zeng_xingdong    时间: 2021-6-18 16:50

感觉动作输入太长了 不能直接-b -a -e 啥的 并且一个base64 得输入.\coder.exe -base64 -action encoder -string  这么长。。就是有点麻烦

不过还是给楼主点赞了
作者: went    时间: 2021-6-18 19:14

本帖最后由 went 于 2021-6-18 22:30 编辑

回复 6# zeng_xingdong


    谢谢建议,1楼已修改为支持单字母选项,简化参数输入操作
作者: newswan    时间: 2021-6-18 20:04

本帖最后由 newswan 于 2021-6-18 20:11 编辑

-show -action getcoder
把  -action 去掉,直接 -getcoder
比较好些
作者: went    时间: 2021-6-18 20:22

回复 8# newswan


    主要是凑齐5个参数,省去一些校验参数的麻烦,我看看好不好改吧
作者: newswan    时间: 2021-6-18 20:38

回复 9# went


              转换工具   -convert <cp1> <cp2> -<string|file> [<str|filePath>|管道]
          查看编码   -show    -action <getcoder|getmd5> -<file|string> [<str|filePath>|管道]
          url工具    -url     -action <decoder|encoder> -<string|file> [<str|filePath>|管道]
          base64工具 -base64  -action <decoder|encoder> -<string|file> [<str|filePath>|管道]

如果为了参数整齐 <cp1> <cp2> 合一 cp1-cp2 cp1_cp2  麻烦吗
作者: went    时间: 2021-6-18 21:04

回复 10# newswan


    cp1和cp2是转换前后的代码页,两个参数,不能写成一个
作者: newswan    时间: 2021-6-18 22:00

回复 11# went


    cp1 cp2 合一个参数,在程序内分成2个
    cp1 支持 any 或者 空参数  ,程序检测编码,并转换成cp2
作者: went    时间: 2021-6-18 22:28

回复 12# newswan


    可以先getcoder再根据输出进行convert,就不再重写了
作者: locoman    时间: 2021-9-14 11:45

回复 1# went

感谢楼主无私分享!!

如果,能实现“自动转码”功能,真的不失为一个很好的批处理工具!!!

为什么要说“自动转码”呢?

主要是现如今的系统线已经很长很乱了:32位、64位、甚至在一些环境中WIN XP都还在使用,WIN7和WIN10的过渡拉锯战仍然有很长的路。
所以,文件的编码问题也较为混乱了,往往根本无法预知某系统使用的哪种文件编码?也无法预知会生成什么样的文件编码?
但是,我最终想要的文件编码类型应该预知的。

所以,对源文件的编码格式,最好在内部进行自动判断,不需要我去确定,我只需要指定转换输出文件的编码格式即可!!

如:对一个未知编码的格式文件xyz.txt处理——
转ANSI
coder -c xyz.txt ANSI abc.txt

转UTF-8
coder -c xyz.txt UTF-8 abc.txt

转UTF-16_BE
coder -c xyz.txt UTF-16_BE abc.txt

如此,在批处理中的应用就方便灵活多了!!

作者: locoman    时间: 2021-9-14 18:51

本帖最后由 locoman 于 2021-9-14 18:52 编辑
回复  locoman


    14楼是不是你需要的
went 发表于 2021-9-14 14:06


基本上是那个意思!

coder -c -1 0 -f utf8.txt>ansi.txt
添加了cp1自动检测编码的参数(-1),仅对utf8和ansi文件有效

但是,对14楼的仍有改进的必须:
1.  既然是自动编码检测了,就应该全面自动检测,不能仅仅只有两种,这样别人是不好判断的!
2. 其实,Unicode to ANSI  的需求更多,主要是当前32位与64位混用的时代,很多32位的只能使用 ANSI ,就更需要Unicode 与 ANSI 的互转。
3. 单看14楼的格式,不知道您是否采取的是用特定文件名来作判断的?这样至少不能自定义文件名了!还是能让别人自定义文件名才好,如下:
coder -c -1 0 -f xyz.txt ANSI abc.txt
coder -c -1 0 -f xyz.txt UTF-8 abc.txt
coder -c -1 0 -f xyz.txt UTF-16_BE abc.txt
coder -c -1 0 -f xyz.txt Unicode abc.txt

祝您完美成功!!
作者: went    时间: 2021-9-14 19:04

回复 17# locoman


    编码判断内部还是和 -show    -action getcoder选项一样的判断方法,和文件名无关系
    ansi和unicode转换更简单了,现实中我倒是很少遇到unicode文件
作者: went    时间: 2021-9-15 12:05

本帖最后由 went 于 2021-9-15 12:07 编辑

回复 17# locoman


    我没找到unicode文件,能否上传一份?
    我转换出来的都乱码了....
作者: locoman    时间: 2021-9-15 15:53

回复  locoman


    我没找到unicode文件,能否上传一份?
    我转换出来的都乱码了....
went 发表于 2021-9-15 12:05



  传不上啊!仅仅4K还是传不上来。
作者: went    时间: 2021-10-11 22:15

已加入unicode编码, 代码页使用1200
作者: slimay    时间: 2021-10-12 12:43

回复 21# went
为啥不用C语言, 汇编费时又费力.
作者: went    时间: 2021-10-12 13:45

回复 22# slimay


    确实汇编比不上c,只是个人觉得汇编比较自由没有约束
作者: locoman    时间: 2021-10-12 14:48

请问:新版在哪里?
下载顶楼的测试使用不行啊!
作者: went    时间: 2021-10-12 15:26

回复 24# locoman


    unicode分大小端模式,我是inter CPU,小端数据存储,所以我电脑上unicode即utf16-le,现在也只能处理小端数据
作者: went    时间: 2021-10-12 15:35

回复 24# locoman


    或者你贴个你电脑上unicode文件的网盘链接,我有时间再看下
作者: went    时间: 2021-10-13 02:10

回复 24# locoman


    1.花时间把核心代码和exe源码重构了一遍,现支持以下几种编码任意互转,智能识别源编码
        [ ANSI | UTF-8 | UTF-8_BOM | UTF-16_BE | UTF-16_LE ]
    2.我在虚拟机win7上看到记事本有unicode选项,其实就是utf-16_le编码
作者: locoman    时间: 2021-10-13 16:02

本帖最后由 locoman 于 2021-10-13 16:04 编辑

回复 1# went


测试您V2.0版本测试情况:
一、文件编码查看测试——  
coder -s -a gc -f "0.txt"
         查看文件编码 [ ANSI | UTF-8 | UTF-8_BOM | UTF-16_BE | UTF-16_LE ]


ANSI文件返回的是:ANSI
Unicode文件返回的是:UTF-16_LE,  (最好还是直接返回为Unicode!!)

二、自动转码测试——
1. 对这个使用格式有点疑惑(不知转换结果文件怎么写?例子说明是这样的: coder -c -1 ansi -f "1.txt"):

我只好这样写: coder -c -1 ansi -f "1.txt" >“2.txt”

2. 自动转码结果文件内容丢失(最后几行的内容没有了,并有乱码了)


我发了一个Unicode文本文件供您测试,Unicode文件名:ssv_Unicode.txt,下载地址如下:
https://cnyunfei.lanzouw.com/iMydYvaklda
作者: went    时间: 2021-10-13 18:44

本帖最后由 went 于 2021-10-13 20:54 编辑

回复 28# locoman


    感谢测试,已修复内容丢失bug
    对于unicode显示问题由于不同cpu大小端不一样,暂时不准备处理,参照win10记事本中的编码显示方式
    文件编码转换,请使用'>'重定向到新文件进行保存,参照base64解码的例子
作者: locoman    时间: 2021-10-14 14:41

本帖最后由 locoman 于 2021-10-14 14:49 编辑

回复 29# went


  最新这个修复有问题哟——
1. 没有帮助信息了——执行后,原先是自动出现使用例子的,现在没有了!!!!!!
2. 查看编码格式coder -s -a gc -f "ssv.txt" ,也没有返回显示值了!!!!!!!
3. coder -c -1 ansi -f转码输出也是空的!!!!!!!

作者: went    时间: 2021-10-14 17:32

回复 30# locoman


    忘了测试win7兼容性,现已修复,顺便把-1参数改成了auto
作者: locoman    时间: 2021-10-15 10:14

这测试正常了。
目前,就是360见不得它,老杀它!
作者: went    时间: 2021-10-15 13:32

回复 30# locoman


    装了360有没有病毒就是它说了算
作者: locoman    时间: 2021-10-20 09:54

批量提取文件DM5码

@echo off
for /r %%i in (*.mp3) do (
  title %%i
  (
echo "%%i"
coder -s -a gm -f "%%~i"
echo.
  )>>file.txt
)
pause
作者: xp3000    时间: 2021-10-24 16:27

压缩了还是?被360干掉了
  1. @cd "%~dp0"&@echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in ('dir/s/b/ad^| findstr /i /v "\\ANSI$ \\UTF-8$ \\UTF-8_BOM$ \\UTF-16_LE$ \\UTF-16_BE$"') do (
  3.     if %%~za EQU 0 (rd "%%a") else (pushd "%%a"&echo,进入"%%a")
  4.         for /f "delims=" %%b in ('dir /b/a-d/oN "*.txt" "*.log" "*.htm" "*.html"') do (set fn=%%b
  5.             for /f "delims=" %%i in ('%~dp0coder.exe -s -a gc -f "!fn!"') do (
  6. if not exist "%%i" (MD "%%i" & move "!fn!" "%%i") else (move "!fn!" "%%i")
  7. )
  8. )
  9. )
  10. pause
复制代码
当文件为网页时候错误
作者: went    时间: 2021-10-24 18:53

回复 33# xp3000


    没有压缩,我也不知道360为什么报毒
    请问是哪种网页编码获取错误
作者: xp3000    时间: 2021-10-24 21:12

移动了         1 个文件。
移动了         1 个文件。
移动了         1 个文件。
移动了         1 个文件。
移动了         1 个文件。
移动了         1 个文件。
文件打开失败! Error:2移动了         1 个文件。
文件打开失败! Error:2移动了         1 个文件。
文件打开失败! Error:2移动了         1 个文件。
文件打开失败! Error:2移动了         1 个文件。
文件打开失败! Error:2请按任意键继续. . .

html各种网页
作者: went    时间: 2021-10-24 22:22

回复 35# xp3000


    错误2是文件未找到,可能是文件没有读取权限
    试试移动到其它目录再操作
作者: went    时间: 2021-10-26 13:27

回复 37# xp3000


    可以传到网盘吗,我试下
作者: went    时间: 2021-10-26 19:24

回复 38# xp3000


    在html文件夹中执行命令 dir /b/a-d/on "*.htm" "*.html"
    会把每个html文件都列出两遍,我以前都没有注意过这个命令.
    原因就在此,第一遍文件已经移动了,第二遍就找不到文件,返回错误2
作者: xp3000    时间: 2021-10-26 19:31

谢谢,原来是这样
作者: went    时间: 2021-10-26 19:34

回复 40# xp3000


    简单解决方式
  1. dir /b/a-d/oN "*.txt" "*.log" "*.htm" "*.html"
复制代码
改为
  1. dir /b/a-d/oN "*.txt" "*.log" "*.htm*"
复制代码

作者: locoman    时间: 2021-10-27 12:49

其实,扩展名往后都是模糊匹配的。
比如:dir *.xls
他会把 .xls 文件和 .xlsx 都列出来的。
作者: yyz219    时间: 2021-10-27 15:45

辛苦楼主了
作者: 5i365    时间: 2021-12-17 14:37

回复 1# went


    您好, 我经常遇到有的txt文件是ansi编码, 然后用的打开有乱码的情况,

用您的工具, 怎样识别文件的编码, 然后如果不是utf-8就把ansi编码的文件转成utf-8的格式呢, 能写个示例吗? 感谢

作者: went    时间: 2021-12-17 19:42

回复 43# 5i365


    可以使用auto参数自动识别源文件编码
  1. @echo off & cd /d "%~dp0"
  2. mkdir utf8 2>nul
  3. for %%i in (*.txt) do coder -c auto utf-8 -f "%%~i" > "utf8\%%~nxi"
  4. pause&exit
复制代码

作者: 5i365    时间: 2021-12-17 20:15

回复 44# went


    感谢大侠帮忙, 有一奇怪的情况想请教一下:
文件内容中即有英文也有中文和符号, 在很多情况下,
从ANSI转到UTF-8不会乱码,
但是UTF-8转成ANSI, 有时乱码, 有时正常, 乱码的情况占大多, 能指点一下门路吗? 困惑很久了, 感谢
作者: went    时间: 2021-12-17 20:26

回复 45# 5i365


    用记事本转换正常吗?
    可以发个源文本链接我测试下
作者: 5i365    时间: 2021-12-17 20:50

回复 46# went


    用您刚写的批处理还没遇到问题, 因没手上也没要测试的文本文件,

我一般是用notepad2改编码会发现上面的情况, 我以后会用您的批处理多试试, 有情况定会过来反馈, 再次感谢

另外, 这个auto参数是智能识别能不能转成utf-8是吗? 能防止乱码吗?
作者: went    时间: 2021-12-17 21:07

回复 47# 5i365


    auto在程序内部自动识别源文件编码,然后根据不同逻辑进行转换
    防止乱码不敢保证,出现问题可以直接跟帖反馈,我会一直维护
作者: 5i365    时间: 2021-12-17 21:33

回复 48# went


    大侠有个建议, 因为coder.exe文件比较小, 可以用下面的代码把它打包进bat文件, 使用时, 释放到临时文件然后就能使用, 如果加个向导执行, 那就太方便了

https://gitee.com/famik/Compressed2TXT/blob/master/README.md
作者: went    时间: 2021-12-17 21:56

回复 49# 5i365


    根据这个修改就是了
http://www.bathome.net/viewthread.php?tid=41604&highlight=%C7%B6%C8%EB
作者: 5i365    时间: 2022-1-12 12:38

回复 44# went


    大侠, 请能转码后能直接覆盖原文件吗?
下面这样报错
coder -c auto utf-8 -f "test.txt" > "test.txt"
作者: 5i365    时间: 2022-1-12 13:04

本帖最后由 5i365 于 2022-1-12 13:05 编辑

回复 1# went


    遇到一个问题, 请求大侠指点一下, 用下面的命令, 在CMD窗口中显示的字是乱码,但是如果定向到文件, 就不是乱码:
@echo off & cd /d "%~dp0"
coder -c auto utf-8 -f "t.txt"
pause&exit


t,txt内容如下, 编码格式ANSI:
1.歌曲下载:
没伴奏的记录改
作者: went    时间: 2022-1-12 13:35

回复 51# 5i365


    不支持这样操作,只能生成新文件,因为句柄会冲突
作者: went    时间: 2022-1-12 13:36

回复 52# 5i365


    控制台显示字符都是按ansi格式来显示的,utf8自然会显示乱码
作者: 5i365    时间: 2022-1-12 13:45

回复 54# went


    能不生成文件, 把转换的字符存到剪贴板中吗?
作者: went    时间: 2022-1-12 14:11

回复 55# 5i365
  1. coder -c auto utf-8 -f 0.txt|clip
复制代码

作者: 5i365    时间: 2022-1-12 14:17

回复 56# went


    试了一下, 执行后, 在记事本里粘贴, 是乱码,

另外, 在支持命令行的软件上执行coder.exe的任何命令, 会直接输出  命令行使用说明的内容, 能完善一下就好了
作者: 5i365    时间: 2022-1-12 14:24

本帖最后由 5i365 于 2022-1-12 14:25 编辑

回复 56# went


    大侠, 我就是卡在编码这个槛了, 好多文件, 如 txt 或 csv 文件, 事前并不知道是什么编码, 导致读取或输出时, 有乱码
现在的想法是, 处理前, 先用您的工具转成utf8, 然后再导入, 再处理, 再输出
http://www.bathome.net/viewthread.php?tid=61288
作者: h18001220676    时间: 2022-6-2 11:14

楼楼,能否把1.0版本的也发一下
作者: went    时间: 2022-6-3 12:45

回复 59# h18001220676


    1.0的已经删了,不好意思
作者: hfxiang    时间: 2022-11-18 16:01

回复 1# went


   
2022-11-17版的coder帮助中的最后1条:
  1. for %i in (*.png) do ( echo %i| coder -bs64 -a ec -f >"%i.txt" )
复制代码
测试失败?
改为如下方式有效:
  1. for %i in (*.png) do (coder -bs64 -a ec -f "%~i">"%~ni.txt" )
复制代码

作者: went    时间: 2022-11-18 18:50

回复 61# hfxiang


    测试正常的,请问你系统版本是多少
作者: cyb46b46    时间: 2023-3-4 19:22

coder.exe -c UTF-16_BE utf-8 -f "文件1" > "文件2"
转换后第一个字符丢失
作者: went    时间: 2023-3-6 12:09

回复 63# cyb46b46


    请附上原始文本文件链接,便于测试
作者: cyb46b46    时间: 2023-3-6 18:19

回复 64# went


    https://voldemort.lanzout.com/iJ3NJ0pfps2b

随便建立一个UTF-16_BE或UTF-16_LE文本转换成UTF-8都有这个问题
作者: went    时间: 2023-3-6 19:26

回复 65# cyb46b46


    utf16文件要有正确的文件头才能识别,utf16_le是0xfffe,utf16_be是0xfeff
    coder.exe在转换utf16文件时会自动去除前2个字节(文件头),如果没有文件头会丢失第1个字符
    不知道你是什么系统?
   
    修改后的附件下载
作者: cyb46b46    时间: 2023-3-6 20:43

回复 66# went


    非常感谢指正,我明白了


带BOM的开头是FE FF和FF FE,我创建的是不带BOM开头,所以转换后缺一个字符。
作者: 小白龙    时间: 2023-4-18 18:01

回复 1# went


    大佬, 这个工具的源代码能生成DLL 然后调用吗? 我用的软件支持调用dll方便很多, 先感谢
作者: CrLf    时间: 2023-7-27 23:21

感谢分享,已收录到bcn.bathome.net
作者: qinshaoye    时间: 2023-12-1 07:45

感谢楼主无私分享!!!!!!
作者: 小白龙    时间: 2023-12-10 06:44

本帖最后由 小白龙 于 2023-12-10 06:54 编辑

回复 1# went


  楼主好, 能请教一个问题吗? 我用下面的代码, 判断文件编码, 但是编码的显示和Powershell有点不同, Powershell的是UTF8而code.exe输出的是UTF-8, 其它的编码显示也不一样, 能统一成powershell的叫法吗? 或者麻烦大佬, 告知一下怎样修改源代码, 我自己编译一下也可以, 多谢

$enc = & "coder.exe" -s -a gc -f "0.txt"
$textContent = Get-Content -Path "$home\desktop\a.txt" -enc $enc

powershell中的编码叫法有这些





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