C#、VB.NET、ASP.NET 通用解决获取网页源码乱码问题原因,中文文本乱码完美方案。


    ''' <summary>
    ''' 转换Byte数组为字符串
    ''' </summary>
    ''' <param name="buff"></param>
    ''' <returns></returns>
    Public Function ReadAsString(ByVal buff() As Byte) As String
        Dim stream As Stream = New MemoryStream(buff)
        'c# - How can I detect the encoding/codepage of a text file - Stack Overflow http://stackoverflow.com/questions/90838/how-can-i-detect-the-encoding-codepage-of-a-text-file/5830273#5830273
        Dim position As Int64 = 0
        Try
            stream.Position = position
            Dim reader As New StreamReader(stream, New UTF8Encoding(False, True), True)
            Return reader.ReadToEnd
        Catch exception As DecoderFallbackException
            stream.Position = position
            Dim reader2 As New StreamReader(stream, Encoding.Default) '.GetEncoding(&H4E4))
            'Debug.Print(reader2.CurrentEncoding.ToString)
            Return reader2.ReadToEnd
        Catch ex As Exception
            Debug.Print(ex.Message & vbCrLf & ex.StackTrace)
        End Try
        Return ""
    End Function

上述代码为VB.NET函数,C#和ASP.NET版,参见上面注释里的链接。

C#、VB.NET、ASP.NET 通用解决获取网页源码乱码问题原因,中文文本乱码完美方案。

这里强调一下,网络上所谓的使用请求头、Html中的编码都不能完美解决乱码问题,上述代码方案,只管读取结果,不管什么头、什么Html指定,都是扯淡。没用的,这个方案读取任意txt文件可以保证不再乱码,txt指任意文本内容,不是指txt后缀文件。

,参数为二进制数组,二进制数组哪里来?看下面

1.   io.file.readallbytes(file)

2.   webclient.downdata(url)

3.   System.Net.HttpWebResponse     .GetResponseStream 获取字节数组。

以上99.99%解决编码问题,当然非要说还是乱码的也还是会有,那就是你给你二进制保存到txt用记事本打开本身就会乱码,但极端情况还是手动人工指定一下因定编码解析吧。以上用于自动分析编码使用。

如果只是要自动获取编码的类型,可以在上述两处打印:

 


            Select Case reader2.CurrentEncoding.CodePage
                Case 1200
                    ReturnEncodeMode = "Unicode"
                Case 1201
                    ReturnEncodeMode = "BigUnicode"
                Case 936
                    ReturnEncodeMode = "ANSI"
                Case 65001
                    ReturnEncodeMode = "UTF8"
            End Select

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值