fenhanxue 发表于 2021-8-1 21:44:49

utf8编码的字符串如何转为ansi编码的字符串【已解决】

本帖最后由 fenhanxue 于 2021-8-1 22:39 编辑



如图,有一段str,是由dllcall返回的,是utf8格式的,需要转ansi格式才不会是乱码

请教有什么现成的UDF能转么,

我试过 BinaryToString(StringToBinary($str,1),4)
但是转换后的内容还是有部分乱码

我这里用来测试的$str的原文是    “测试中”

haijie1223 发表于 2021-8-1 21:46:11

1和4换一下试试

fenhanxue 发表于 2021-8-1 21:53:17

haijie1223 发表于 2021-8-1 21:46
1和4换一下试试

1和4对换也不行



这个转码,用易语言的精易模块中的   编码_Utf8到Ansi   命令,可以顺利转码


fenhanxue 发表于 2021-8-1 21:55:51

而且感觉 dll返回的原始乱码,au3和易语言返回的好像还不一样:
au3返回的是:娴嬭瘯涓?
易语言返回的是:娴嬭瘯涓??

haijie1223 发表于 2021-8-1 21:58:22

我觉得你把文件打包一下发上来,会更快一些。

fenhanxue 发表于 2021-8-1 22:08:36

haijie1223 发表于 2021-8-1 21:58
我觉得你把文件打包一下发上来,会更快一些。


haijie1223 发表于 2021-8-1 22:18:30

BinaryToString(StringToBinary($Str, 1), 4)
返回的不就是正确结果么

haijie1223 发表于 2021-8-1 22:36:43

#PRE_UseX64=n
Local $hDLL = DllOpen("PsyQrDcd.dll")
Local $aRet = DllCall($hDLL, "int", "DecodePictureFile", "str", @ScriptDir & '\test.jpg')
Local $tData = DllStructCreate('byte')
Local $buffer = DllStructCreate('ptr')
DllStructSetData($buffer, 1, DllStructGetPtr($tData))
Local $aStr = DllCall($hDLL, "int", "GetDecodeData", "int", $aRet - 1, 'ptr', DllStructGetPtr($buffer))
MsgBox(0,0,BinaryToString(DllStructGetData($tData, 1), 4))
DllClose($hDLL)

haijie1223 发表于 2021-8-1 22:56:06

#PRE_UseX64=nLocal $hDLL = DllOpen("PsyQrDcd.dll")
Local $aRet = DllCall($hDLL, "int", "DecodePictureFile", "str", @ScriptDir & '\test.jpg')
Local $aStr = DllCall($hDLL, "ptr", "GetDecodeDataString", "int", $aRet - 1)
Local $tData = DllStructCreate('byte',$aStr)
MsgBox(0,0,BinaryToString(DllStructGetData($tData, 1), 4))
DllClose($hDLL)

fenhanxue 发表于 2021-8-1 22:56:07

haijie1223 发表于 2021-8-1 22:36


byte中的1024是不是代表允许返回的最大字节数是1024?这个数字是不是也可以改成别的数字的?

DllCall($hDLL, "int", "GetDecodeData", "int", $aRet - 1, 'ptr', DllStructGetPtr($buffer))
中最后加的 'ptr', DllStructGetPtr($buffer) 这个用法哪里有具体的文字说明么,帮助文件里好像没看到这个写法,感觉换个dll可能又不会了

haijie1223 发表于 2021-8-1 22:57:30

fenhanxue 发表于 2021-8-1 22:56
byte中的1024是不是代表允许返回的最大字节数是1024?这个数字是不是也可以改成别的数字的?

...

不用换,够用了。
用9楼的代码吧,写法相对简单。

chzj589 发表于 2021-8-2 09:51:48

haijie1223 发表于 2021-8-1 22:57
不用换,够用了。
用9楼的代码吧,写法相对简单。

太好了,解决我的问题。






chzj589 发表于 2021-8-2 10:02:02

haijie1223 发表于 2021-8-1 22:56


请教,要读取图片文字如何修改?

yohoboy 发表于 2021-8-2 11:14:43

本帖最后由 yohoboy 于 2021-8-2 11:17 编辑

chzj589 发表于 2021-8-2 10:02
请教,要读取图片文字如何修改?
版上有QR_CODE範例,先行產生QR_CODE圖片後再用這範例讀取,或是直接由線上製作,然後用
PRT_SCR鍵,再開啟畫圖程式,黏貼後再剪切QR_CODE圖形,另存新檔,如範例的 TEST.JPG 即可。

chzj589 发表于 2021-8-2 11:43:53

yohoboy 发表于 2021-8-2 11:14
版上有QR_CODE範例,先行產生QR_CODE圖片後再用這範例讀取,或是直接由線上製作,然後用
PRT_SCR鍵,再 ...

我的意思是读取图片文字,不是读取二维码图片文字。生成二维码图片我知道。
页: [1] 2 3 4
查看完整版本: utf8编码的字符串如何转为ansi编码的字符串【已解决】