将xml发布到类似REST的服务时的错误请求 - 特殊字符

时间:2009-08-22 14:31:55

标签: .net xml rest encoding

我正在将应用程序与服务(iContact)集成,将其API描述为“类似于休息”。我发布XML,一切正常......直到我发送像æøå这样的特殊字符 - 然后我从服务器收到“错误请求”错误。

<contacts>
  <contact>
    <firstname>Søren</firstname>
    <lastname>ÆbleTårn</lastname>
  </contact>
</contact>

我尝试在cdata中输入firstname和lastname值,但这没有帮助。

是否有一些我可以应用于值的编码(类似于html-encode),还是需要向另一个方向移动?

我怀疑问题是针对.Net的,但答案可能是,所以这里是我使用的代码:

Dim xml as string = GenerateXml()
Dim http As New HttpClient("http://uri.to/rest")
Dim resp As HttpResponseMessage = http.Post(String.Empty, HttpContent.Create(xml))

3 个答案:

答案 0 :(得分:1)

您可以在XML中使用数字实体来帮助解决某些编码问题:

<firstname>S&#xf8;ren</firstname>

但您仍然必须确保服务器编码正确,以接收,处理和存储这些字符。很难知道这里的错误在哪里......

答案 1 :(得分:1)

此Web服务似乎没有使用与您的应用程序相同的字符集编码。典型编码为UTF-8或UTF-16。查看服务文档(或者如果在服务响应中查找失败)查看字符编码并查看是否指定了编码。如果指定了一个,请验证它是否与客户端请求中使用的编码匹配。

XMLEncode数据也是一种好习惯。

答案 2 :(得分:0)

在通过答案指向正确的方向后,我将此函数写入xmlencode文本。

Public Function XmlEncode(ByVal text As String) As String
    For i As Integer = 127 To 255
        text = Replace(text, Chr(i), "&#" & i.ToString & ";")
    Next
    return text
End Function

我相信它可能会更有效,但性能并不是真正的问题,因为这种情况很少发生。