6
  • 使用什么字符编码StreamReader.ReadToEnd()
  • 下面使用 (b) 而不是 (a) 的原因是什么?
  • 如果使用(a)而不是(b),它们是否有成为字符编码问题的风险?
  • 还有比(a)和(b)更好的方法吗?

(一个)

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

(二)

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
4

3 回答 3

13

使用的标准编码StreamReaderEncoding.Default,它会因机器而异,具体取决于您的 Windows 版本和您设置的区域设置。 Encoding.UTF8.

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

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

有关更多信息,请参阅构造函数文档

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

你应该使用 UTF-8 吗?这取决于您正在下载的页面。如果您下载的页面是用 UTF-8 编码的,那么,是的,您应该使用 UTF-8。如果 HTTP 标头中没有定义字符集,则 UTF-8 应该是默认值。但是您需要检查Content-Type标题以确定页面是否使用其他编码。例如,Content-Type标题可能是:

 application/xml; charset=ISO-8859-2

您必须检查 的ContentType属性HttpWebResponse,检查是否有charset字段,并根据该字段正确设置编码。

或者,只使用 UTF-8 并希望获得最好的结果。

于 2012-11-12T04:44:55.530 回答
0

I found a solution, It's not pretty but it works.
First you'll have to set your StreamReader to DetectEncoding as true,
Then you put some special character on your page.

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

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

于 2014-01-27T12:02:34.017 回答
0

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

于 2012-11-12T04:33:33.200 回答