标题: [其他] 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命令比较简单- powershell "[int][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 - powershell "[System.BitConverter]::touint16(([System.Text.Encoding]::getencoding(936).GetBytes('字')[1,0]),0)"
- 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
将所有汉字弄成一个对照表然后直接搜索更方便- @echo off&chcp 936>nul
- (
- echo 字
- )>"%temp%\$"
- for /f "tokens=1,2" %%i in ('certutil -dump "%temp%\$"') do set @hex=%%i%%j&goto :aaa
- :aaa
- set /a @hex=0x%@hex%
- echo,%@hex%
- pause&exit/b
复制代码
作者: czjt1234 时间: 2025-1-12 14:48
- s = Asc("字")
- If s < 0 Then s = s + 65536
- MsgBox s
复制代码
- 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
脚本我写好了,,,大神参阅一下!- @Echo off
- Title 汉字转GB2312十进制码
- SET/P 字=请输入你要转码的字符:
- CALL,:GB2312 %字%
- :GB2312
- Title 汉子转GB2312 码
- Set 字=%~1
- :拆字
- Set 字符=%字符%%字:~0,1%,
- Set 字=%字:~1%
- IF not "%字%"=="" Goto,拆字
- Set 字符=%字符:~0,-1%
- Echo.if wscript.arguments.count=0 then msgbox "没有转码参数!" ^& wscript.quit >%Temp%\GB2312.VBS
- Echo.WScript.Echo CLng("&H" ^& Hex(Asc(WScript.Arguments(0)))) >>%Temp%\GB2312.VBS
- For %%a in (%字符%) do ( For /f "delims=" %%i in ('"Cscript.exe //e:Vbscript //nologo %Temp%\GB2312.VBS %%a"') do ( Echo. ALT + %%i ))
- Del %Temp%\GB2312.VBS /Q
- 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
根据你的思路我简化了命令,,- 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 |