5

这是在黑暗中拍摄,如果这个问题听起来像疯子的胡言乱语,我提前道歉。

作为与第三方集成的一部分,我需要使用 C# 对一些字符串信息进行 UTF8 编码,以便我可以通过多部分形式将其发送到目标服务器。问题是他们拒绝了我的一些提交,可能是因为我没有正确编码他们的内容。

现在,我正试图弄清楚目标服务器如何接收或解释短划线或连字符 - 我无法通过查看它来判断它是什么?~@~S(是的,这是一个 5 个字符的字符串并且不是您的浏览器出现故障)。Encoding.UTF8.GetBytes()不幸的是,我对如何使用字节数组开始识别问题可能出在哪里没有足够透彻的了解。

如果有人可以提供任何提示或建议,我将不胜感激。到目前为止,我唯一的朋友是 MSDN,而且还不是很多。

更新 1:经过一番挖掘,我发现使用System.Web.HttpUtility.UrlEncode()EM DASH 字符(“—”)进行编码会将其十六进制编码为“%e2%80%94”。

我目前正在HttpWebRequest帖子中发送此信息,内容类型为“application/x-www-form-urlencoded”——这可能是导致问题的原因吗?如果是这样,编码一系列名称-值对的正确方法是什么,其值可能包含 Unicode 字符,以便期望 UTF-8 请求的服务器能够理解它?

4

2 回答 2

3
byte[] test = System.Text.Encoding.UTF8.GetBytes("-");

应该给你

test[0] = 0x2D (45 as integer).  

验证您是否将 0x2D 发送到目标服务器。

于 2011-01-28T23:48:55.053 回答
1

您可能需要在 Content-Type 标头中添加“charset=utf-8”参数。 您可能还希望有一个Content-Encoding标头来设置您的编码。 标题应包含以下内容:

内容类型:multipart/form-data;字符集=utf-8

否则,Web 服务器不会知道您的字节是 UTF-8 字节,因此它会误解它们。

于 2011-01-28T23:53:07.183 回答