.net - StreamReader.ReadToEnd()使用什么字符编码?

标签 .net vb.net encoding utf-8 streamreader

  • StreamReader.ReadToEnd()使用什么字符编码?
  • 在下面使用(b)而不是(a)的原因是什么?
  • 如果使用(a),是否存在字符编码问题的风险
    而不是(b)?
  • 是否有另一种方法优于(a)和(b)?

  • (a)
    Dim strWebResponse As String
    Dim Request As HttpWebRequest = WebRequest.Create(Url)
    Using Response As WebResponse = smsRequest.GetResponse()
        Using reader As StreamReader = New StreamReader(Response.GetResponseStream())
            strWebResponse = reader.ReadToEnd()
        End Using
    End Using
    

    (b)
    Dim encoding As New UTF8Encoding()
    Dim strWebResponse As String
    Dim Request As HttpWebRequest = WebRequest.Create(Url)
    Using Response As WebResponse = Request.GetResponse()
        Dim responseBuffer(Response.ContentLength - 1) As Byte
        Response.GetResponseStream().Read(responseBuffer, 0, Response.ContentLength - 1)
        strWebResponse = encoding.GetString(responseBuffer)
    End Using
    

    最佳答案

    StreamReader使用的标准编码为Encoding.Default,这在不同的计算机上会有所不同,具体取决于您的Windows版本和设置的语言环境。 Encoding.UTF8

    我很难记住默认值是什么,因此我更喜欢使用StreamReader构造函数让我指定编码。例如:

    Using reader As StreamReader = New StreamReader(Response.GetResponseStream(), Encoding.UTF8)
    

    有关更多信息,请参见constructor documentation

    如果在示例a中使用该构造函数,则结果将与示例b相同。

    您应该使用UTF-8吗?这取决于您正在下载的页面。如果您要下载的页面是使用UTF-8编码的,那么可以,您应该使用UTF-8。如果在HTTP header 中未定义任何字符集,则应将UTF-8设置为默认值。但是您需要检查Content-Type header ,以确定页面是否使用其他编码。例如,Content-Type header 可能显示为:
     application/xml; charset=ISO-8859-2
    

    您将必须检查HttpWebResponseContentType属性,检查是否存在charset字段,然后根据该字段正确设置编码。

    或者,仅使用UTF-8并希望达到最佳效果。

    关于.net - StreamReader.ReadToEnd()使用什么字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338404/

    相关文章:

    sql - 将 linq 语句转换为 sql

    php - 如何正确设置文件、数据库、连接等的编码?

    c# - C# 编译器或 Jitter 会优化这些类型的算术运算吗?

    c# - 如何防止 SelectedIndexChanged 事件在从列表框中删除项目后在列表框中触发

    c# - 如何使用 Booksleeve 实现 Redis 流水线请求?

    postgresql - 编码 UTF8 与语言环境 en_US 不匹配;所选的 LC_CTYPE 设置需要编码 LATIN1

    c++ - 在 C++ 中如何更改存储在字符串中的文件扩展名?

    c# - 域对象和服务类对象应该放在哪里?

    asp.net - 将SQL计数结果存储到变量VB中

    vb.net - 使用 .Skip() 和 .Take() 方法对 DataTable 进行 Linq