【发布时间】:2011-06-17 13:41:44
【问题描述】:
这是在黑暗中拍摄,如果这个问题听起来像是疯子的胡言乱语,我提前道歉。
作为与第三方集成的一部分,我需要使用 C# 对一些字符串信息进行 UTF8 编码,以便可以通过多部分形式将其发送到目标服务器。问题是他们拒绝了我的一些提交,可能是因为我没有正确编码他们的内容。
现在,我正试图弄清楚破折号或连字符(我无法仅通过查看它来判断它是哪一个)如何被目标服务器接收或解释为?~@~S(是的,这是一个 5 个字符的字符串,不是您的浏览器出现故障)。不幸的是,我对Encoding.UTF8.GetBytes() 的了解不够透彻,无法知道如何使用字节数组来开始识别问题所在。
如果有人能提供任何提示或建议,我将不胜感激。到目前为止,我唯一的朋友是 MSDN,而且不是很多。
更新 1:经过进一步挖掘,我发现使用 System.Web.HttpUtility.UrlEncode() 编码 EM DASH 字符(“—”)会将其十六进制编码为“%e2%80%94 ”。
我目前在 aHttpWebRequestpost 中发送此信息,内容类型为“application/x-www-form-urlencoded”——这可能是导致问题的原因吗?如果是这样,对一系列值可能包含 Unicode 字符的名称-值对进行编码以便期望 UTF-8 请求的服务器能够理解的正确方法是什么?
【问题讨论】:
-
从这个结果我猜你可能是 ascii 编码 utf8 编码一个破折号的结果。
-
即使编码错误,1 个字符的破折号也不太可能被翻译成 5 个字符的序列。这可能不仅仅是编码问题。
-
@Joshua:我认为你已经接近问题的核心。我刚刚在我的原始帖子中添加了更新,提供了更多信息。
-
不幸的是,我选择了 application/octet-stream 并假设它的两端格式正确,所以我无法为您提供更多帮助。
标签: c# encoding utf-8 character-encoding utf8-decode