Board logo

标题: [其他] GB2312汉字编码字,VBS转换疑问! [打印本页]

作者: jiavip    时间: 2025-1-11 21:49     标题: GB2312汉字编码字,VBS转换疑问!

如题!现在的WINDOWS 平台(简体版)默认是GB2312汉字编码字,
如 按住 ALT+ 49897 即可得到鄙人姓氏(麻)!
在上古时期应该大家都听说过这样一个玩笑!~~获取QQ好友密码~~

在QQ 好友对话框里输入  我是
然后按住 ALT 接着输入 55021
松开 ALT 然后再快速按 ALT +Enter
即可获取好友QQ密码!

不用问也知道,尝试过的人都被朋友们嘲讽了一翻!
当时年少无知,只是略微懵懂了一些是利用了我们不为人知的代码或编码!
再到现在鄙人虽然不再从事IT 相关行业。但想起那段神奇的年代,充满了回忆和青春!
现在知道那是利用 按住 ATL + 十进制 55021 输入可以直接输入 GB2312汉字编码表里对应的 十六进制 D6ED 里的汉字 猪 !
BAT 不能直接转换编写GB2312汉字编码表,VBS 可以 HTML 可以 JS 也可以!很多编程语言都可以轻松实现,奈何鄙人水平有限!
VBS 和 JS 都只停留在粗浅阶段,认得是何物,但说不清是何物的阶段!,由于没有工作相关的必要深究。
近端时间无聊,想起了上古时期的笑话,于是萌生出写一个 用BAT 转换汉字GB2312汉字 成 十进制 的想法。
想在没有输入法的情况下输入自己定义的文字组,手动解码转换我知道,
例如:我常用的密码就是 网站缩写 + 姓氏GB2312十进制阿拉伯数字 + 特俗字符
或在 朋友面前秀一手 装一下杯也不错啊!呵呵,,,
摸了很久,进制转换搞定了,读取也搞定了,就只剩VBS或JS 这关过不去,
不知道怎么用VBS 获取汉字对应的GB2312码,什么进制的都可以!
剩下的鄙人就可以编写一个,汉字转 十进制 码!
VBS汉字转Asc 、AscB 、AscW  码等我知道,就是不知道怎么获取GB2312码!

有懂的大牛给点思路或参考呗!。。
纯属花里胡哨的想法,鄙人现从事水电维修行业,职称:工程部维修主管,俗称:电工,再再俗称:换灯管的,,,
编程这条路上没天赋也没啥资本,懂的勿笑!,,,,
作者: idwma    时间: 2025-1-11 22:06

爱好是最好的天赋资本
用系统自带的powershell命令比较简单
  1. powershell "[int][char]'字'"
复制代码
得到23383
  1. powershell "[char]23383"
复制代码
从23383转回字
作者: jiavip    时间: 2025-1-11 22:22

本帖最后由 jiavip 于 2025-1-11 22:29 编辑

回复 2# idwma
你这获取到的也不是 GB2312 字码啊!
在 GB2312字码表里 “字” 对应的 十六进制是 D7D6 十进制是 55254
在任意输入法里,按住 ATL + 55254 松开得到 “字” 才是GB2312字码表里 十进制的编码。
也就是说,你这获取到的是 其他字码  或许是 ANSI 字码,未知~~~!
不过,你这解法也让我多了一种尝试,可以利用其他命令或WINDOWS系统自带的脚本语言,尝试获取汉字 对应的 GB2312 字码!
作者: idwma    时间: 2025-1-11 23:08

回复 3# jiavip
  1. powershell "[System.BitConverter]::touint16(([System.Text.Encoding]::getencoding(936).GetBytes('字')[1,0]),0)"
  2. powershell "[System.Text.Encoding]::GetEncoding(936).getchars(([System.BitConverter]::GetBytes(55254)[1,0]))"
复制代码

作者: jiavip    时间: 2025-1-11 23:53

回复 4# idwma

谢谢大牛!代码完美符合期待,powershell 以前也有研究过一段时间,只停留在粗浅简单的应用层面,(碍于英文基础太差,学过的基本还给学校了)高阶点的基本玩不来。
我自己也编辑整理了一些粗浅的BAT脚本, 汉字转拼音 、QWERTY加密\解密 、汉字CHR转码、RMB 大写转换、简繁互换 、逐个显示文字、语音朗读本文、2~36进制互换、实现凯撒密码算法、等脚本,
用BAT 混编VBS或JS 语言编写,实现一些简单且粗浅的功用。。。:加上现在这个 汉字转 GB2312字码、文字处理批处理,基本算是整理齐全了,
打算再研究一个  BAT加密/解码 摩斯密码 ,。。估计就再没其他脚本爱好了,,
乖乖的遛狗、逗娃、钓鱼,,,呵,有时候人生就是这么简单且无聊!
祝愿大家2025 都有愉快的生活吧! :lol
作者: Five66    时间: 2025-1-12 07:34

将所有汉字弄成一个对照表然后直接搜索更方便
  1. @echo off&chcp 936>nul
  2. (
  3. echo 字
  4. )>"%temp%\$"
  5. for /f "tokens=1,2" %%i in ('certutil -dump "%temp%\$"') do set @hex=%%i%%j&goto :aaa
  6. :aaa
  7. set /a @hex=0x%@hex%
  8. echo,%@hex%
  9. pause&exit/b
复制代码

作者: czjt1234    时间: 2025-1-12 14:48

  1. s = Asc("字")
  2. If s < 0 Then s = s + 65536
  3. MsgBox s
复制代码
  1. MsgBox CLng("&H" & Hex(Asc("字")))
复制代码

作者: czjt1234    时间: 2025-1-12 15:06

https://www.unicode.org/Public/M ... SFT/WindowsBestFit/
这里的bestfit936.txt右击另存为
下载下来
包含了所有的GBK字符和对应的16进制数
作者: jiavip    时间: 2025-1-12 19:36

回复 7# czjt1234
谢谢大神提供的VBS代码!Asc("")转码我知道怎么应用,但都是粗浅的层次,但是我不明白,为什么在后面 + 65536 就和 GB2312 码对上了呢?
有什么参考或说法吗?因为我是自学瞎摸,没接受过体系的教学,希望大神不吝赐教!
根据你的代码思路我写下的转码的BAT,我还是比较偏向VBS 转码,毕竟有时候代码要仍到古老的 XP 虚拟机上去运行,XP 以前的WIN没有 powershell
脚本我写好了,,,大神参阅一下!
  1. @Echo off
  2. Title 汉字转GB2312十进制码
  3. SET/P 字=请输入你要转码的字符:
  4. CALL,:GB2312 %字%
  5. :GB2312
  6. Title 汉子转GB2312 码
  7. Set 字=%~1
  8. :拆字
  9. Set 字符=%字符%%字:~0,1%,
  10. Set 字=%字:~1%
  11. IF not "%字%"=="" Goto,拆字
  12. Set 字符=%字符:~0,-1%
  13. Echo.if wscript.arguments.count=0 then msgbox "没有转码参数!" ^& wscript.quit >%Temp%\GB2312.VBS
  14. Echo.WScript.Echo CLng("&H" ^& Hex(Asc(WScript.Arguments(0)))) >>%Temp%\GB2312.VBS
  15. For %%a in (%字符%) do ( For /f "delims=" %%i in ('"Cscript.exe //e:Vbscript //nologo %Temp%\GB2312.VBS %%a"') do ( Echo. ALT + %%i ))
  16. Del  %Temp%\GB2312.VBS /Q
  17. PAUSE>NUL & EXIT
复制代码
ALT + 53435
ALT + 53435
ALT + 47351
ALT + 52923
ALT + 45295
ALT + 55034
ALT + 47613
ALT + 52946
ALT + 46532
ALT + 46323
ALT + 51697
ALT + 41889
最终实现的无输入法打字!我才发现我一直习惯的把ALT 键打成 ATL ,,,果然是没编程天赋!
再反向写一个解码的,应该是把Asc()码 还原成 chr() 慢慢的继续摸!不过不用还原也成直接按 ALT 就可以解码!
作者: jiavip    时间: 2025-1-12 19:44

回复 6# Five66
哇!想不 certutil -dump  命令居然可以解那“字”码,从未想过的思路!还是摸得少了,,总之谢谢各位大神们!
作者: jiavip    时间: 2025-1-12 20:01

回复 6# Five66
根据你的思路我简化了命令,,
  1. chcp 936>nul&set/p=字<nul>$&certutil -dump $&del $
复制代码

作者: Five66    时间: 2025-1-13 18:53

回复 11# jiavip


   
代码页默认936的话也可以去掉 chcp 936
不删除临时文件可以稍微省一点点点点点点资源




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