Encoding.ASCII VS Encoding.UTF8 Bug

时间:2012-09-14 08:49:07

标签: http unicode utf-8 ascii utf-16

世界!我正在使用.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);
    }

我使用谷歌浏览器,如果使用 Encoding.UTF8 ,部分内容会在显示页面的文本中丢失。结束“indows-1251,utf-8; q = 0.7,*; q = 0.3”被切断。丢失部分后的其余HTML文本仍然存在。如果我使用 Encoding.ASCII ,一切正常。 原因的任何想法?

1 个答案:

答案 0 :(得分:0)

猜测......但是UTF-8编码可能使用更多的字节来编码你的文本而不是ASCII(可能一些字符以两字节方式编码,而ASCII只是使用?或类似的东西)和因此消息的最大长度超过了?