user11 发表于 2015-3-9 19:42:43

INetGetSource获取内容后,StringInStr匹配不到?

本帖最后由 user11 于 2015-3-9 20:26 编辑

求助,代码如下,GBK编码,奇怪的问题,研究了半天没搞明白,msgbox 直接显示返回$ok可以正常显示出汉字,,

“圈”汉字为什么匹配不到呢??



如果用xmlhttp 可以匹配到,但是msgbox 不能正常显示汉字,这是怎么回事??》
   $xmlhttp = ObjCreate("Microsoft.XMLHTTP")
        $xmlhttp.open("GET", $url, False)
        $xmlhttp.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded")
        $xmlhttp.setRequestHeader("Cache-Control", "no-cache")
        $xmlhttp.setRequestHeader("Accept-Language", "zh-CN,zh")
        $xmlhttp.setRequestHeader("Accept", "*/*")
        $xmlhttp.send()#include <INet.au3>

        $url = "http://users.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=273674753"

        $ok = _INetGetSource($url)

        If StringInStr($ok, "圈") Then               
                MsgBox(0, 0, $ok)

        EndIf
       


haijie1223 发表于 2015-3-9 20:41:26

目测是编码问题,估计_INetGetSource没有判断源代码的编码直接按照Ansi处理了。#include <INet.au3>
$url = "http://users.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=273674753"
$ok =_INetGetSource($url)
$ok = BinaryToString(StringToBinary($ok),4)
If StringInStr($ok, "圈") Then        MsgBox(0, 0, $ok)

user11 发表于 2015-3-9 21:06:34

本帖最后由 user11 于 2015-3-9 21:15 编辑

回复 2# haijie1223


谢谢,,可是浏览器查看代码的时候,,GB2312才能显示啊,,为什么要转UTF-8呢,好奇怪。。msgbox 正常显示汉字,,

inetgetsource($url,0)过不了

SciTE 程序版本:3.3.6到底是要 ANSI还是要 utf-8,,,utf8 msgbox 汉字不显示,ansi可以显示,但是stinginstr竟然要utf8这么奇怪。。

haijie1223 发表于 2015-3-10 21:50:04

回复 3# user11


    源代码明明是UTF8的

wangms 发表于 2015-3-10 22:19:06

回复 4# haijie1223

请教,是从哪儿知道源代码是UTF8的?

haijie1223 发表于 2015-3-11 17:07:55

回复 5# wangms


    打开http://qzone.qq.com/的网页看下源代码就可以了。<html>
        <head>
                <meta charset="UTF-8" />
                <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
。。。。

wangms 发表于 2015-3-11 21:12:29

回复 6# haijie1223

3Q!............

wangms 发表于 2015-3-12 01:43:02

不过楼主提出的问题确实奇怪啊,哪位能说说原因。。

haijie1223 发表于 2015-3-12 20:29:42

回复 8# wangms


    没有找到原因,难道是bug?#AutoIt3Wrapper_Run_Debug_Mode=y
$sHtml="圈"
If StringInStr($sHtml, "圈") Then MsgBox(0, 0, $sHtml)换成其他汉字就可以了,或者在代码中加入其他汉字也可以了。#AutoIt3Wrapper_Run_Debug_Mode=y
$sHtml="汉字圈"
If StringInStr($sHtml, "圈") Then MsgBox(0, 0, $sHtml)

wangms 发表于 2015-3-12 21:33:21

回复 9# haijie1223

谢谢老师的耐心解答,已搜到有关讨论的帖子,挺有意思的。

user11 发表于 2015-3-13 09:24:56

本帖最后由 user11 于 2015-3-13 09:28 编辑

谢谢楼上几位的热烈讨论,,又get了新知识,,UTF-8编码有道理,,,可是chrome打开我那个连接,却必须选GBK编码,甚是奇怪,,不仅圈,还有小,字等。。。。
页: [1]
查看完整版本: INetGetSource获取内容后,StringInStr匹配不到?