- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
世界!我正在使用 .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/
我使用术语“词法编码”是因为我没有更好的编码。 与字母相反,单词可以说是交流的基本单位。 Unicode 尝试为所有已知字母表的每个字母分配一个数值。对一种语言来说是字母,对另一种语言来说是字形。 U
我在UTF-8中有csv文件,我想将其保存在西里尔字母(Windows 1251)中...在中,我仅找到Atom -重新打开,并使用ctrl+shift+u编码 在 Sublime Text 3 中,
在lua 5.3引用手册中,我们可以看到: Lua is also encoding-agnostic; it makes no assumptions about the contents of a
看完后how gzip compression works它让我思考。如果源和代理服务器 (CDN) 都支持 gzip,则添加 Vary: Accept-Encoding头需要吗? 最佳答案 Vary
我正在向我的项目添加一项功能,我们将生成指向我们网站内部内容的链接,并且我们希望这些链接尽可能短,因此我们将制作自己的“URL 缩短器”。 我想知道生成的短网址的最佳编码/字母表是什么。这很大程度上是
我构建了一个用于压缩 HTTP 输出的模块。阅读spec ,我在以下几件事上没有发现明显的区别: 接受编码: 是否应将其视为与 Accept-Encoding: * 相同,还是视为不存在 header
在下面的代码中: package main import ( "bytes" "encoding/json" "fmt" ) type Student struct {
这个问题在这里已经有了答案: Why does encode delete the argument? (1 个回答) 6年前关闭。 Encode::encode 的文档说: encode $octe
在Android4.1中,实时编码应用中经常会请求关键帧。但是如何使用 MediaCodec 对象呢?当前的 Android4.2 SDK 似乎不支持它。 最佳答案 您可以 通过在排队输入缓冲区时指定
我有 CSV 格式的数据,这些数据在字符编码方面被严重打乱,可能在不同的软件应用程序(LibreOffice Calc、Microsoft、Excel、Google Refine、自定义 PHP/My
您可能知道,在 Perl 中,“utf8”意味着 Perl 对 UTF-8 的宽松理解,它允许使用技术上不是 UTF-8 中有效代码点的字符。相比之下,“UTF-8”(或“utf-8”)是 Perl
本文整理了Java中org.geotools.ysld.encode.YsldEncoder.encode()方法的一些代码示例,展示了YsldEncoder.encode()的具体用法。这些代码示例
现在还没有任何关于红色的书,因为它太新了。因此,我正在尝试遵循一本旧的 Rebol 书,并从中挽救我能得到的东西。 我发现一些命令,例如 read,由于文件编码的原因,我无法执行代码。 save %
错误:无法映射用于编码 UTF-8 的字符。由于版权特征,我收到此错误。我使用的是 Netbeans 7.2。 /** * � 2006 * * This class was generate
现在还没有任何关于红色的书,因为它太新了。因此,我正在尝试遵循一本旧的 Rebol 书,并从中挽救我能得到的东西。 我发现一些命令,例如 read,由于文件编码的原因,我无法执行代码。 save %
错误:无法映射用于编码 UTF-8 的字符。由于版权特征,我收到此错误。我使用的是 Netbeans 7.2。 /** * � 2006 * * This class was generate
我正在尝试使用客户端提供的值在 PHP 中测试 Soap Security header 。 他们提供的值(value)如... wTAmCL9tmg6KNpeAQOYubw== ...并说这是一个
这个问题已经有答案了: ClassNotFoundException/NoClassDefFoundError in my Java web application (3 个回答) 已关闭 8 年前。
世界!我正在使用 .Net Framework 4 System.Net.Sockets.TcpClient 编写简单的 HTML 服务器。 我在 StringBuilder html 中有 HTML
我正在尝试使用 Yii 来提供网络服务。自动生成的 wsdl 如下。我可以从命令行成功使用 Web 服务,但是通过 Web 浏览器,我得到了 SOAP-ERROR: Encoding: Violati
我是一名优秀的程序员,十分优秀!