找回密码
 加入
搜索
查看: 3389|回复: 9

如何转换字符到ie可读,udf好像不好用啊

  [复制链接]
发表于 2009-11-23 00:44:50 | 显示全部楼层 |阅读模式
悬赏40金钱已解决
本帖最后由 vivier001 于 2009-11-24 13:34 编辑

比如在百度中搜索“百度”,地址栏会变作
http://www.baidu.com/s?wd=%B0%D9%B6%C8
也就是把百度转换成%B0%D9%B6%C8
怎么样才能完成这样的转换呢?
udf中的
_INetExplorerCapable ( $s_IEString )
可以把“百度”转换成%B0%B6
只有一半是相同的中间间隔着少了一半,谁知道怎么回事?

最佳答案

查看完整内容

一会给你写个udf,以前也弄了个,找不到了 OK,写好了~这个只对字母、数字、下划线以外的字符编码,比较合理~ 呵呵 为了方便搜索已将此代码单独整理到UDF区: http://www.autoitx.com/forum.php?mod=viewthread&tid=11042
发表于 2009-11-23 00:44:51 | 显示全部楼层
本帖最后由 afan 于 2009-11-23 22:57 编辑

一会给你写个udf,以前也弄了个,找不到了
OK,写好了~
$str = AnsiURLEncode("百度")
MsgBox(0, 0, $str)
ShellExecute('http://www.baidu.com/s?wd=' & $str)

Func AnsiURLEncode($str)
        Local $astr, $i, $s2d, $sS = StringSplit($str, '')
        For $i = 1 To UBound($sS) - 1
                If StringRegExp($sS[$i], '[^\x00-\xff]') Then
                        $s2d = StringToBinary($sS[$i] & ' ') 
                        $astr &= '%' & StringMid($s2d, 3, 2) & '%' & StringMid($s2d, 5, 2) 
                ElseIf StringRegExp($sS[$i], '[^\w]') Then
                        $s2d = StringToBinary($sS[$i]) 
                        $astr &= '%' & StringMid($s2d, 3, 2) 
                Else
                        $astr &= $sS[$i]
                EndIf
        Next
        ;$astr = StringReplace($astr, '%20', '+') ;注:如果空格的编码想换成'+'号,可以取消注释此行
        Return $astr
EndFunc   ;==>AnsiURLEncode
这个只对字母、数字、下划线以外的字符编码,比较合理~ 呵呵

为了方便搜索已将此代码单独整理到UDF区: http://www.autoitx.com/forum.php?mod=viewthread&tid=11042
发表于 2009-11-23 01:04:48 | 显示全部楼层
‘只有一半是相同的中间间隔着少了一半’----什么意思?
 楼主| 发表于 2009-11-23 08:27:24 | 显示全部楼层
就是把地址栏的代码所有偶数个%后面的两个字母全去掉就和udf所转换的相同了
比如“百度”的代码分别是
%B0%D9%B6%C8
%B0        %B6(实际中间没有空格为了便于比较加上空格)
 楼主| 发表于 2009-11-23 14:19:59 | 显示全部楼层
没人啊
 楼主| 发表于 2009-11-23 14:25:33 | 显示全部楼层
终于有一点明白了,就是把中文转换成GB2312编码然后加上百分号"%"。接着的问题就是怎么把中文转换成GB2312编码了。
 楼主| 发表于 2009-11-23 14:30:31 | 显示全部楼层
感谢  afan
找到了你以前的回帖哈哈 ,见下帖
http://www.autoitx.com/forum.php ... mp;highlight=gb2312
MsgBox(0, 0, cn2ansi('你好'))

Func cn2ansi($wchar)
        Dim $kg = ''
        For $i = 1 To StringLen($wchar)
                $kg &= ' '
        Next
        Local $wz = StringToBinary($wchar & $kg), $anstr = '%'
        For $ii = 3 To StringLen($wz) Step 2
                $anstr &= BinaryToString(StringMid($wz, $ii, 2)) & '%'
        Next
        Return StringTrimRight($anstr, 1)
EndFunc   ;==>cn2ansi
发表于 2009-11-23 14:50:28 | 显示全部楼层
回复 7# vivier001


    哦,这个也可以用吧,不过它对英文数字等同样转码,那就没必要了。
我再写一个不对字母及数字等编码的,一会编辑在现在的2楼~

评分

参与人数 3金钱 +80 贡献 +32 收起 理由
131738 + 50 + 20
vivier001 + 20 + 2
水木子 + 10 + 10 依然那么厉害!

查看全部评分

发表于 2009-11-23 15:21:29 | 显示全部楼层
有什么用呀!
 楼主| 发表于 2009-11-23 16:18:44 | 显示全部楼层
有什么用呀!
anyky123 发表于 2009-11-23 15:21





有时候post中文会不成功的,转换一下就好了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-11 14:02 , Processed in 0.083034 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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