【问题标题】:Error processing Special Characters处理特殊字符时出错
【发布时间】:2011-06-23 18:41:52
【问题描述】:

我正在创建一个原子 XML 数据包作为 REST 服务请求的一部分。 但是,当 XML 中某个标签的值包含注册商标的符号时,就会出现问题。

XML 正在通过 WebRequest 作为“PUT”发送。当问题字符在 XML 中时,完整的 XML 包不会到达服务器。数据包被截断,我看到服务器上报告了“Unexpected EOF in start tag”错误。

我确实在服务器上注意到请求的第一部分(在被截断之前)包含问题字符“®”。我希望只看到“®”。

我以为我只需要担心 XML 中的这些字符:

双引号:"

单引号:'

小于:

大于 >

和号:&

如何转义或处理我的字符串,以便可以毫无问题地发送任何字符?

【问题讨论】:

  • 这是一个编码问题。 Â 字符在 utf-8 编码中很常见。应该永远产生®。您的问题中没有任何细节可以帮助确定编码问题的根源。
  • 仅供参考,该语言被命名为“C#”,而不是“CSharp”。此外,“WebRequest”不是 C# 的一部分,它是 .NET 的一部分。
  • 现在我正在使用 SecurityElement.Escape()

标签: c# xml escaping


【解决方案1】:

Xml 可以通过这种方式欺骗您。并不是某些字符无效,而是一大段 unicode 是defined as valid,除此之外的任何内容都是禁止的。在没有更复杂逻辑的情况下做到这一点的诀窍是使用CDATA section

【讨论】:

  • 不,使用 CDATA 部分很少有助于解决编码问题。我经常看到 CDATA 被用作魔法仙尘,但我很惊讶地看到它居然以这种方式被推荐。
  • @Michael - CDATA 的诀窍在于它只适用于特定领域。您不想用它构建整个记录,也不想只是用 CDATA 部分自动封装每个字段。但是当您知道某些字段中有“坏”字符数据时,CDATA 通常是处理它的最简单方法。
【解决方案2】:

首先,您的术语非常松散。 “其中一个标签的价值”是什么意思?违规字符是在元素名称中还是在文本内容中?

如果必须,您可以通过转义非 ASCII 字符来解决问题,例如“注册商标符号”变为®。但是,这不应该是必要的。最好解决问题的根本原因,即文档的创建者和它的接收者对其编码有不同的想法。您的配置中有一些东西导致了这种错误沟通,我无法知道它可能是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2014-09-13
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多