Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net StreamReader.ReadToEnd()使用什么字符编码? StreamReader.ReadToEnd()使用什么字符编码 使用(b)而不是(a)的原因是什么 如果使用(a),是否存在字符编码问题的风险 而不是(b) 还有比(a)和(b)更好的方法吗_.net_Vb.net_Encoding_Utf 8_Streamreader - Fatal编程技术网

.net StreamReader.ReadToEnd()使用什么字符编码? StreamReader.ReadToEnd()使用什么字符编码 使用(b)而不是(a)的原因是什么 如果使用(a),是否存在字符编码问题的风险 而不是(b) 还有比(a)和(b)更好的方法吗

.net StreamReader.ReadToEnd()使用什么字符编码? StreamReader.ReadToEnd()使用什么字符编码 使用(b)而不是(a)的原因是什么 如果使用(a),是否存在字符编码问题的风险 而不是(b) 还有比(a)和(b)更好的方法吗,.net,vb.net,encoding,utf-8,streamreader,.net,Vb.net,Encoding,Utf 8,Streamreader,(a) (b) 是b很好,因为UTF-8将与任何ASCII文档一起使用 UTF8是Unicode编码类型 更重要的是,它的向后兼容ASCII,XML和HTML的标准默认值StreamReader使用的标准编码是,StreamReader使用的标准编码是,根据您设置的Windows版本和区域设置,每台机器的编码会有所不同编码.UTF8 我记不起默认值是什么,所以我更喜欢使用StreamReader构造函数来指定编码。例如: Using reader As StreamReader = New St

(a)

(b)


是b很好,因为
UTF-8将与任何ASCII文档一起使用

UTF8是
Unicode编码类型


更重要的是,它的
向后兼容ASCII
XML和HTML的标准默认值

StreamReader使用的标准编码是,
StreamReader
使用的标准编码是,根据您设置的Windows版本和区域设置,每台机器的编码会有所不同<代码>编码.UTF8

我记不起默认值是什么,所以我更喜欢使用
StreamReader
构造函数来指定编码。例如:

Using reader As StreamReader = New StreamReader(Response.GetResponseStream(), Encoding.UTF8)
有关更多信息,请参阅

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

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

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


或者,只需使用UTF-8,并抱着最好的希望。

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

StreamReader=新的StreamReader(responseStream,System.Text.Encoding.Default,true)


我能让
StreamReader.ReadToEnd
使用UTF8吗?你同意第一个答案应该使用UTF8编码吗?不!默认编码不是encoding.default,而是UTF-8,如中指定的:)。我同意微软将这种编码命名为默认编码是令人困惑的,而实际上它并不是.Net中的默认编码。大概理由是它是旧的非Unicode本机Windows程序的默认设置。@MarkJ:你说得对。我错了。文档的旧版本(错误地)表示它使用了
编码。默认值
。有关详细信息,请参阅。我会更正的。@JimMischel&@MarkJ:它在哪里说它默认为
UTF-8
?我所能看到的是:
字符编码由encoding参数设置,缓冲区大小设置为1024字节。StreamReader对象试图通过查看流的前三个字节来检测编码。如果文件以适当的字节顺序标记开头,它会自动识别UTF-8、小端Unicode和大端Unicode文本。否则,将使用用户提供的编码。有关详细信息,请参阅Encoding.GetPreamble方法。
@CJ7:请参阅。“此构造函数将编码初始化为UTF8Encoding…”您看过这里吗,提取此编码并在streamreader对象中使用它。
Using reader As StreamReader = New StreamReader(Response.GetResponseStream(), Encoding.UTF8)
 application/xml; charset=ISO-8859-2