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

时间:2012-11-12 04:30:25

标签: .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

3 个答案:

答案 0 :(得分:9)

StreamReader使用的标准编码是 Encoding.Default,根据您的Windows版本和您设置的区域设置,因机器而异。 {{ 1}}。

我无法记住默认值,所以我更喜欢使用允许我指定编码的Encoding.UTF8构造函数。例如:

StreamReader

有关详细信息,请参阅constructor documentation

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

你应该使用UTF-8吗?这取决于您下载的页面。如果您下载的页面是使用UTF-8编码的,那么是的,您应该使用UTF-8。如果HTTP标头中没有定义字符集,则UTF-8应该是默认值。但是您需要检查Using reader As StreamReader = New StreamReader(Response.GetResponseStream(), Encoding.UTF8) 标头以确定该页面是否使用其他编码。例如,Content-Type标题可能显示为:

Content-Type

您必须检查 application/xml; charset=ISO-8859-2 的{​​{3}}属性,检查是否有HttpWebResponse字段,并根据该字段正确设置编码。

或者,只需使用UTF-8并希望获得最佳效果。

答案 1 :(得分:0)

是的b很好,因为UTF-8 will work with any ASCII document
UTF8为Unicode encoding type 更重要的是它backwards compatible with ASCII,& standard default for XML and HTML

答案 2 :(得分:0)

我找到了一个解决方案,它并不漂亮,但它确实有效 首先,您必须将StreamReader设置为DetectEncoding为真,
然后你在页面上放了一些特殊字符。

  

StreamReader reader = new StreamReader(responseStream,System.Text.Encoding.Default,true);

     

<%@ Page Title =“FTP - Verificação”Language =“C#”