找回密码  加入

AUTOIT CN

搜索
查看: 160|回复: 7

[网络通信] 【已解决】繁简转换中存在的 Bug?

[复制链接]
发表于 2019-7-8 09:41:07 | 显示全部楼层 |阅读模式
本帖最后由 chishingchan 于 2019-7-11 13:05 编辑

根据本坛搜索获取 内码 转换函数,于是示例一下,但是出现结果存在问题!请指教,谢谢!
示例:GB 转 BIG5
  1. #include <WinAPIConv.au3>

  2. $vText = "演示"
  3. $vText = _WinAPI_MultiByteToWideChar($vText, 936, 0x02, False)
  4. $vText = _WinAPI_WideCharToMultiByte($vText, 950)
  5. MsgBox(0, StringToBinary($vText), $vText)

  6. $vText = "陈旧"
  7. $vText = _WinAPI_MultiByteToWideChar($vText, 936, 0x02, False)
  8. $vText = _WinAPI_WideCharToMultiByte($vText, 950)
  9. MsgBox(0, StringToBinary($vText), $vText)
复制代码



注意标题二进制长度,演示 正常;陈旧 不对。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 2019-7-8 17:20:46 | 显示全部楼层
以前收藏的旧代码,不知道是不是这样?但多转换一下,似乎还是可以的

  1. MsgBox(0, '转大五:', _GbkToBig5('演示'))
  2. MsgBox(0, '转大五:', _GbkToBig5(_JianToFan('陈旧')))

  3. Func _Big5toGbk(ByRef $sInputText);BIG5转GBK
  4.         $sInputText = _WinAPI_MultiByteToWideChar($sInputText, 950, $MB_COMPOSITE, False);转为繁体中文
  5.         $sInputText = _WinAPI_WideCharToMultiByte($sInputText, 936);转为GBK繁体中文
  6.         Return $sInputText
  7. EndFunc

  8. Func _GbkToBig5($sInputText);GBK转BIG5
  9.         $sInputText = _WinAPI_MultiByteToWideChar($sInputText, 936, $MB_COMPOSITE, False);转为繁体中文
  10.         $sInputText = _WinAPI_WideCharToMultiByte($sInputText, 950);转为GBK繁体中文
  11.         Return $sInputText
  12. EndFunc

  13. Func _JianToFan($sInputText);GB2312转GBK
  14.         Local $InPtr = _WinAPI_MultiByteToWideChar($sInputText, 936, $MB_COMPOSITE, False)
  15.         Local $OutPtr
  16.         Local $dll = DllOpen('kernel32.dll')
  17.         Local $result = DllCall($dll, "none", "LCMapStringA", "LONG", 0x0804, "dword", 0x4000000, "STR", DllStructGetData($InPtr, 1), "LONG", DllStructGetSize($InPtr), "str", $OutPtr, 'long', DllStructGetSize($InPtr)); "PTR",$OutPtr,'long',DllStructGetSize($InPtr))
  18.         If IsArray($result) Then Return $result[5]
  19. EndFunc

  20. Func _FanToJian($sInputText);GBK转GB2312
  21.         Local $InPtr = _WinAPI_MultiByteToWideChar($sInputText, 936, $MB_COMPOSITE, False)
  22.         Local $OutPtr
  23.         Local $dll = DllOpen('kernel32.dll')
  24.         Local $result = DllCall($dll, "none", "LCMapStringA", "LONG", 0x0804, "dword", 0x2000000, "STR", _
  25.                         DllStructGetData($InPtr, 1), "LONG", DllStructGetSize($InPtr), "str", $OutPtr, 'long', DllStructGetSize($InPtr)); "PTR",$OutPtr,'long',DllStructGetSize($InPtr))
  26.         If IsArray($result) Then Return $result[5]
  27. EndFunc
复制代码
发表于 2019-7-8 22:23:09 | 显示全部楼层
学习了,谢谢
 楼主| 发表于 7 天前 | 显示全部楼层
破帽遮颜 发表于 2019-7-8 17:20
以前收藏的旧代码,不知道是不是这样?但多转换一下,似乎还是可以的

我就是参考这个,就是觉得有错。
 楼主| 发表于 7 天前 | 显示全部楼层
感觉找到问题了。首先将国标码转换为统一码后再转换大五码
 楼主| 发表于 5 天前 | 显示全部楼层
越编越多功能!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
 楼主| 发表于 5 天前 | 显示全部楼层
本帖最后由 chishingchan 于 2019-7-11 13:08 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 5 天前 | 显示全部楼层

期待楼主的作品
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-7-16 19:27 , Processed in 0.046875 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表