chishingchan 发表于 2019-7-8 09:41:07

【已解决】繁简转换中存在的 Bug?

本帖最后由 chishingchan 于 2019-7-11 13:05 编辑

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

$vText = "演示"
$vText = _WinAPI_MultiByteToWideChar($vText, 936, 0x02, False)
$vText = _WinAPI_WideCharToMultiByte($vText, 950)
MsgBox(0, StringToBinary($vText), $vText)

$vText = "陈旧"
$vText = _WinAPI_MultiByteToWideChar($vText, 936, 0x02, False)
$vText = _WinAPI_WideCharToMultiByte($vText, 950)
MsgBox(0, StringToBinary($vText), $vText)


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

破帽遮颜 发表于 2019-7-8 17:20:46

以前收藏的旧代码,不知道是不是这样?但多转换一下,似乎还是可以的

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

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

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

Func _JianToFan($sInputText);GB2312转GBK
        Local $InPtr = _WinAPI_MultiByteToWideChar($sInputText, 936, $MB_COMPOSITE, False)
        Local $OutPtr
        Local $dll = DllOpen('kernel32.dll')
        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))
        If IsArray($result) Then Return $result
EndFunc

Func _FanToJian($sInputText);GBK转GB2312
        Local $InPtr = _WinAPI_MultiByteToWideChar($sInputText, 936, $MB_COMPOSITE, False)
        Local $OutPtr
        Local $dll = DllOpen('kernel32.dll')
        Local $result = DllCall($dll, "none", "LCMapStringA", "LONG", 0x0804, "dword", 0x2000000, "STR", _
                        DllStructGetData($InPtr, 1), "LONG", DllStructGetSize($InPtr), "str", $OutPtr, 'long', DllStructGetSize($InPtr)); "PTR",$OutPtr,'long',DllStructGetSize($InPtr))
        If IsArray($result) Then Return $result
EndFunc

blue003 发表于 2019-7-8 22:23:09

学习了,谢谢

chishingchan 发表于 2019-7-9 14:01:57

破帽遮颜 发表于 2019-7-8 17:20
以前收藏的旧代码,不知道是不是这样?但多转换一下,似乎还是可以的

我就是参考这个,就是觉得有错。

chishingchan 发表于 2019-7-9 20:40:19

感觉找到问题了。首先将国标码转换为统一码后再转换大五码

chishingchan 发表于 2019-7-11 13:03:20

越编越多功能!

chishingchan 发表于 2019-7-11 13:05:59

本帖最后由 chishingchan 于 2019-7-11 13:08 编辑

hnfeng 发表于 2019-7-11 14:19:36

{:1_206:}
期待楼主的作品
页: [1]
查看完整版本: 【已解决】繁简转换中存在的 Bug?