用HttpWebResponse获取到网页源码后,有的是GB2312,有的是UTF-8,还有其它的编码,如果网页是UTF-8,在下载网页时用GB2312解码后的源码中文是乱码,请问在下载网页源码后怎么获得网页的相应编码进行解码?问题很急,请大虾们帮帮忙,谢谢。
解决方案 »
- WPF如何实现控件随着窗体的拉伸而拉伸?
- webservice 接口 同步调用 网络延时如何处理??
- 懂msil的进
- 欢迎加入深圳.net C#技术群1538924
- form窗体超链接?
- 不知大家对XmlSerializer有没有研究?
- 请问一下 用C#怎么在窗体上画一个椭圆? 大侠们给点源代码吧!
- 有关TabControl+RichTextBox的问题,谢谢了
- 怎么输出是ASCII码??
- C#用direcx9画三维
- 请教个小问题,ASP.Net中,把一个文件存到了Server的一个临时目录,怎样下载到用户的本机,同时弹出对话框让用户另存为?
- 当窗体以单件模式show()的时候,在FormLoad里执行this.Close()会出错,是为什么?
我也试过了,把接收到的数据流转为ASCII后再转为GB2312,不管网页是什么编码的,中文还是乱码呀
CharacterSet和ContentEncoding属性为什么都返回空字符串,NET中就没有一种统一的方法去自适应网页编码吗?
IE浏览器应该也是基于 charset来确定编码的
比较新的服务器系统才可能会给,这个方法不用想了。XMLDocument.load好像可以自动辨别编码,但是我找了很久没有找到他是怎么做的。对于页面中没有charset的,IE也会显示错啊,只有用户自己选择编码才可以。
可见微软都没有解决好这个问题。
http://community.csdn.net/Expert/TopicView3.asp?id=5169830
IStreamPtr spStream,
std::vector<DWORD>& dwCodePages,
DWORD dwFlag = MLDETECTCP_8BIT,
DWORD dwPrefWinCodePage = 0)
{
HRESULT hr = S_OK; const int N = 32;
INT nScores = N;
DetectEncodingInfo info[N];
hr = DetectCodepageInIStream(
dwFlag,
dwPrefWinCodePage,
spStream,
info,
&nScores);
if (FAILED(hr))
{
return hr;
} for (int i = 0; i < nScores; i++)
{
dwCodePages.push_back(info[i].nCodePage);
} return S_OK;
} // IE5.0 or lator
static HRESULT DetectCodepageInIStream(
DWORD dwFlag,
DWORD dwPrefWinCodePage,
IStream *pstmIn,
DetectEncodingInfo *lpEncoding,
INT *pnScores)
{
HRESULT hr = S_OK; try
{
IMultiLanguage2Ptr spMultiLanguage2 = GetMultiLanguage();
if (spMultiLanguage2 == NULL)
{
return E_FAIL;
} hr = spMultiLanguage2->DetectCodepageInIStream(
dwFlag,
dwPrefWinCodePage,
pstmIn,
lpEncoding,
pnScores);
if (FAILED(hr))
{
return hr;
}
}
catch (...)
{
return E_FAIL;
} return S_OK;
} static IMultiLanguagePtr GetMultiLanguage()
{
HRESULT hr = S_OK; IMultiLanguagePtr spMultiLanguage;
hr = spMultiLanguage.CreateInstance(__uuidof(CMultiLanguage));
if (FAILED(hr))
{
return NULL;
} return spMultiLanguage;
}
我拿去用了哈谢谢楼主 谢谢 蒋晟.Net
不过我也不会 vb.net
Shared Property DetectCodePage(() As HRESULT
End Property
IStreamPtr spStream,
std::vector<DWORD>& dwCodePages, DWORD dwFlag = MLDETECTCP_8BIT,
DWORD dwPrefWinCodePage Function 0)() As =
Dim hr As HRESULT = S_OK
const Integer N = 32
Dim nScores As INT = N
Dim info(N) As DetectEncodingInfo
hr = DetectCodepageInIStream(
dwFlag,
dwPrefWinCodePage,
spStream,
info,
&nScores)
If FAILED(hr) Then
Return hr
End If
Dim i As Integer
For i = 0 To nScores- 1 Step i + 1
dwCodePages.push_back(info(i).nCodePage)
Next
Return S_OK
End Function
' IE5.0 or lator
Shared Property DetectCodepageInIStream(() As HRESULT
End Property
DWORD dwFlag,
DWORD dwPrefWinCodePage,
IStream *pstmIn,
DetectEncodingInfo *lpEncoding,
Private Function *pnScores)() As INT
Dim hr As HRESULT = S_OK
Try
Dim spMultiLanguage2 As IMultiLanguage2Ptr = GetMultiLanguage()
If spMultiLanguage2 = NULL Then
Return E_FAIL
End If
hr = spMultiLanguage2->DetectCodepageInIStream(
dwFlag,
dwPrefWinCodePage,
pstmIn,
lpEncoding,
pnScores)
If FAILED(hr) Then
Return hr
End If
Catch
Return E_FAIL
End Try
Return S_OK
End Function
Shared Function GetMultiLanguage() As IMultiLanguagePtr
Dim hr As HRESULT = S_OK
Dim spMultiLanguage As IMultiLanguagePtr
hr = spMultiLanguage.CreateInstance(__uuidof(CMultiLanguage))
If FAILED(hr) Then
Return NULL
End If
Return spMultiLanguage
End Function