gpt4 book ai didi

http - Encoding.ASCII VS Encoding.UTF8 错误

转载 作者:可可西里 更新时间:2023-11-01 17:03:16 24 4
gpt4 key购买 nike

世界!我正在使用 .Net Framework 4 System.Net.Sockets.TcpClient 编写简单的 HTML 服务器。

我在 StringBuilder html 中有 HTML,其中包含一些文本。例如:

<div id="RequestText">

GET / HTTP/1.1<br/>Host: localhost:90<br/>Connection: keep-alive<br/>Cache-Control: max-age=0<br/>User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11<br/>Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<br/>Accept-Encoding: gzip,deflate,sdch<br/>Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4<br/>Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3

</div>

文本可以是多种多样的。当我向客户发送响应时

private static void SendResponseToClient(NetworkStream clientStream, StringBuilder html)
{
String data = _htmlHeader + html.Length.ToString() + "\n\n" + html; // The "data" is OK!
Byte[] buffer;
buffer = Encoding.UTF8.GetBytes(data); // !UTF8
clientStream.Write(buffer, 0, buffer.Length);
}

我使用的是 Google Chrome,在使用 Encoding.UTF8 的情况下,某些部分在显示页面的文本中丢失了。结尾的“indows-1251,utf-8;q=0.7,*;q=0.3”被剪掉了。丢失部分后的其余 HTML 文本仍然存在。如果我使用 Encoding.ASCII,一切正常。对原因有什么想法吗?

最佳答案

根据您显示的有限代码,这只是一个猜测,但您对 html.Length.ToString() 的使用向我表明您的 _htmlHeader 变量包含以 Content-Length header 结尾的 HTTP header ,并且 html.Length.ToString() 用于完成该 header 。如果这是真的,那么您将向客户端发送错误的 Length 值,因此它最终会从其末端的套接字读取错误数量的字节。 Content-Length header 指定正在发送的字节数。您正在将 Content-Length 设置为 StringBuilder 中的 UTF-16 编码字符数,而您应该将其设置为 < strong>您要发送的 UTF-8 编码字节数。

试试这个:

private static void SendResponseToClient(NetworkStream clientStream, StringBuilder html)
{
Byte[] html_buffer = Encoding.UTF8.GetBytes(html.ToString());

// HTTP does not support non-ASCII characters in headers.
Byte[] http_buffer = Encoding.ASCII.GetBytes(_htmlHeader + html_buffer.Length.ToString() + "\n\n");

clientStream.Write(http_buffer, 0, http_buffer.Length);
clientStream.Write(html_buffer, 0, html_buffer.Length);
}

当然,请确保 _htmlHeader 包含 Content-Type: text/html; charset=utf-8 header 以确保客户端正确处理 UTF-8 编码的 HTML。

关于http - Encoding.ASCII VS Encoding.UTF8 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com