我有一个RESTful WCF服务,它接受带有Unicode编码网址的GET动词。当我在服务器上获取数据时,Unicode字符被奇怪地翻译成小盒子。

我是否需要告诉服务合同才能获得Unicode UrlEncoded获取转换为漂亮的字符串?

这是我的合同:

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "/Document/{Fragment}", RequestFormat = WebMessageFormat.Xml)]
Message GetDocumentFromSearchResult(string Fragment);

这是我传入的unicode示例: %FF%FE%22%00O%FF%FE%20%00King%FF%FE%20%00of%FF

我得到“国王”和“的”好的,但其余的都是小字符串的小方块。

要成为解码问题吗?

有帮助吗?

解决方案

你传递的内容看起来很奇怪:它似乎包含UTF-16用于“字符带字节顺序标记。这几乎肯定是一个问题,所以它看起来更像是输入编码的问题。

通常,UTF-8用于URL,因为这与协议更合适(不需要转义纯ASCII中的所有NUL字节)。这可能是您的服务所期望的,因此它无法正确解码(因为%FF%FE无效UTF-8)。

其他提示

使用Fragment [i]检查字符以查看实际字符是什么。这将删除调试器或其他输出方法可能向您显示的变量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top