| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1382 人关注过本帖
标题:VB下载UTF-8网页的问题
只看楼主 加入收藏
xykz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-6-11
收藏
 问题点数:0 回复次数:5 
VB下载UTF-8网页的问题
搜了好几天了...一直找不到一个完善的解决方法

xmlhttp可以完美下载,但有些网页打开不了
比如
http://search-soft.

使用InternetReadFile下载回来又是string类型的...
转换的时候又不准确...

哪位有比较完善的解决方法么?
搜索更多相关主题的帖子: 网页 
2008-06-17 20:17
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
可以把UTF-8的字符串转化一下吧?
2008-06-17 21:02
xykz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-6-11
收藏
得分:0 
可以啊,但InternetReadFile返回的类型是string
对string进行转换的话有些地方不准确,比如标点符号
2008-06-17 21:14
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
'网上找的代码
'我也突然想到InternetReadFile和InternetWriteFile中的lpBuffer应该是UTF-8,试试看哈!
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 = 65001


Function Utf8ToUnicode(ByRef Utf() As Byte) As String
    Dim lRet As Long
    Dim lLength As Long
    Dim lBufferSize As Long
    lLength = UBound(Utf) - LBound(Utf) + 1
    If lLength <= 0 Then Exit Function
    lBufferSize = lLength * 2
    Utf8ToUnicode = String$(lBufferSize, Chr(0))
    lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(Utf(0)), lLength, StrPtr(Utf8ToUnicode), lBufferSize)
    If lRet <> 0 Then
        Utf8ToUnicode = Left(Utf8ToUnicode, lRet)
    End If
End Function

Function UnicodeToUtf8(ByVal UCS As String) As Byte()
    Dim lLength As Long
    Dim lBufferSize As Long
    Dim lResult As Long
    Dim abUTF8() As Byte
    lLength = Len(UCS)
    If lLength = 0 Then Exit Function
    lBufferSize = lLength * 3 + 1
    ReDim abUTF8(lBufferSize - 1)
    lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UCS), lLength, abUTF8(0), lBufferSize, vbNullString, 0)
    If lResult <> 0 Then
    lResult = lResult - 1
    ReDim Preserve abUTF8(lResult)
    UnicodeToUtf8 = abUTF8
    End If
End Function
2008-06-17 23:53
xykz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-6-11
收藏
得分:0 
上面这段有了
2008-06-18 07:50
jxyga111
Rank: 8Rank: 8
来 自:中華人民共和國
等 级:贵宾
威 望:33
帖 子:6015
专家分:895
注 册:2008-3-21
收藏
得分:0 
学习

烈焰照耀世界,斌凍凍千萬裏
2008-06-18 10:16
快速回复:VB下载UTF-8网页的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022029 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved