汉字转二进制,编码丢失如何解决?
本帖最后由 baikaifang 于 2009-5-5 22:36 编辑例如汉字“水中燃烧”以ANSI方式编码的二进制值是 0xCBAED6D0C8BCC9D5,但在使用 StringToBinary 以 ANSI 编码 方式转换后得到的二进制值却是 0xCBAED6D0 ,后面的8位丢失了,然后再用 BinaryToString 以 ANSI 编码 方式转换回来后的汉字是“水中ŸĄ”,出现了乱码,请大家指定一下,如何用 ANSI编码方式 转换汉字后不丢失二进制值。$Hex = StringToBinary("水中燃烧", 1)
MsgBox(0,"ANSI 编码", "“水中燃烧” 转二进制是:" & $Hex)
MsgBox(0,"ANSI 编码", "二进制 " & $Hex & " 转汉字是:" & BinaryToString($Hex, 1))
MsgBox(0,"正确的编码", "二进制 0xCBAED6D0C8BCC9D5 转汉字是:" & BinaryToString("0xCBAED6D0C8BCC9D5", 1))上面提到的值 0xCBAED6D0C8BCC9D5 是我用工具 HttpWatch 捕捉网页所提交的表单得到的。
解决方法见4楼 $Hex = StringToBinary("水中燃烧", 2)
MsgBox(0,"ANSI 编码", "“水中燃烧” 转二进制是:" & $Hex)
MsgBox(0,"ANSI 编码", "二进制 " & $Hex & " 转汉字是:" & BinaryToString($Hex, 2))
MsgBox(0,"正确的编码", "二进制 0xCBAED6D0C8BCC9D5 转汉字是:" & BinaryToString("0xCBAED6D0C8BCC9D5", 1)) 本帖最后由 baikaifang 于 2009-5-5 22:08 编辑
谢谢楼上的回复,你的代码还不行,因为我现在需要知道的是如何把 "水中燃烧" 这个四个汉字直接转换成二进制 0xCBAED6D0C8BCC9D5 ,而不是使用 UTF 方式转换,为什么这么要求呢,因为我在用 "水中燃烧" 登陆一个网站的时候,该网站POST到服务器数据中的用户名是用 0xCBAED6D0C8BCC9D5 表示的,由于我需要做一个通用登陆器,所以必须直接将汉字转换成以上形式。 曾在论坛里看到有朋友说 编码转换 有字节、单字、双字、四字 等转换方式,1楼的代码 StringToBinary("水中燃烧", 1) 转换后,丢失了后面8位,会不会是因为AU3默认是以字节的方式转换的,因此会丢失后半部,所以请懂的朋友指导一下,谢谢! 问题解决了,在论坛里找到一段代码,是论坛的朋友 auto 写的,在这里谢谢了!
解决后的代码如下:MsgBox(0,"",UrlEncode("水中燃烧"))
Func UrlEncode($Url)
Local $UrlLen
$UrlLen = StringLen($Url)
Local $EnStr,$UrlChar,$EnStr
For $i = 1 To $UrlLen Step 1
$UrlChar = StringMid($Url, $i, 1)
if ascw($UrlChar) > 256 Then
$str =StringReplace(StringToBinary($UrlChar&" ",1),"0x","")
$EnStr &= StringLeft($str,2) & StringRight($str,2)
Else
$str =StringReplace(StringToBinary($UrlChar),"0x","")
$EnStr &= $str
EndIf
Next
Return $EnStr
EndFunc原贴地址:http://www.autoitx.com/forum.php?mod=viewthread&tid=1790&highlight=%B1%E0%C2%EB 收藏,以后一定用得着!
页:
[1]