StreamReader.ReadToEnd()
使用什么字符编码? 而不是(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
您将必须检查
HttpWebResponse
的ContentType属性,检查是否存在charset
字段,然后根据该字段正确设置编码。或者,仅使用UTF-8并希望达到最佳效果。
关于.net - StreamReader.ReadToEnd()使用什么字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338404/