【问题标题】:Any idea how to enforce utf8 within a document知道如何在文档中强制执行 utf8
【发布时间】:2011-03-01 16:44:30
【问题描述】:

我正在创建一个 xml 文档并尝试以 utf8 格式存储。但是,我在存储的文档中收到了一个非 utf8 撇号。

例如:<Name=Dave t="Owner(e.g pete’s)">

我已经试过了

`System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

var docX  = encoding.GetBytes(vdd.ToString());

System.IO.StreamWriter s = new StreamWriter(pathAndFileName, false, encoding);

string myString = encoding.GetString(docX);

s.Write(myString);

`

这应该是矫枉过正,但括号内的'''仍在显示。我也尝试过 htmlencode,但没有帮助。

xml 在 notepad++ 中读取为 utf8,但 ' 字符并未在我的所有客户端系统上解析。

请帮忙.....

【问题讨论】:

  • “非 UTF8 撇号”是什么意思? UTF-8 可以表示 Unicode 中存在的每个字符...
  • 你真的有例外吗?
  • 您发布的示例不是XML; XML 元素必须有标签名称,并且属性必须用引号引起来。你的两个都没有。
  • @Dour High Arch D'oh!好收获!
  • 使用 xmlwriter 和 utf8 编码我得到输出 <Answer score="4" answerCode="5" term="Relations (inc. Parent's)" />这通常显示为

标签: c# utf-8


【解决方案1】:

编辑:Dour 注意到我在所有混乱中遗漏的一些东西;您粘贴的示例根本不是 XML,因此不会解析。我的回答仍然适用,因为“html 编码”和 UTF8 编码是错误的道路。


很难准确说出您的问题是什么,但我已尝试消除一些可能性并提出一种可能性: 导致您的 XML 无法正确解析。

这不是编码问题。正如 The Skeet 所说,UTF8 可以表示所有 Unicode 字符,包括那个字符。相反,这是一个……嗯……一个编码问题。即:一个XML数据编码问题。

字符应该是属性编码,而不是html编码

您使用什么 API 来构建 XML?这应该为您完成,因此您无需担心编码什么、如何编码以及为什么编码。但是,如果您 字符进行属性编码,我认为您的问题将停止。

假设我了解您的问题...

【讨论】:

  • 使用 xmlwriter 和 utf8 编码我得到输出 <Answer score="4" answerCode="5" term="Relations (inc. Parent's)" />这通常显示为
  • 我尝试过使用 xmlwriter、streamwriter 和 xdocument.save... 在所有情况下,' 仍然出现在返回的 xml 中。
  • @Jon Skeet ' 字符是从数据表中提取的字符串的一部分。我试图用 ciorrect 编码替换这些值,但是 VS 找不到它....
【解决方案2】:
<Name=Dave t="Owner(e.g pete’s)">

这不是 XML,'=' 对于标签名称是非法的。如果它应该是一个属性,它必须被引用。它也是未终止的并且没有 XML 声明;如果这是您要输出的内容,则说明您不是在输出 XML。 ' 字符在 UTF-8 和 XML 属性值中都允许使用。

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
var docX = encoding.GetBytes(vdd.ToString());

docXvdd 中 UTF-8 字节的字节数组。如果vdd 包含任何非Unicode 点,它们将被丢弃。

System.IO.StreamWriter s = new StreamWriter(pathAndFileName, false, encoding);

您正在打开一个 UTF-8 编码的输出流,这很公平......

string myString = encoding.GetString(docX);

现在您正在将 UTF-8 编码的数组转换回 C# 字符串。为什么?

s.Write(myString);

现在您将 C# 字符串写回 UTF-8 流,该流会进行第二次 UTF-8 转换。这是没有意义的,请解释一下您要完成的工作。

' 字符未在我的所有客户端系统上解析

那么您的客户端系统不接受 UTF-8。要么修复它,要么找出他们接受的编码并使用它。

【讨论】:

  • 感谢您的演练,代码转换为 utf8 如此频繁是因为我试图确保 ' 字符肯定是 utf8,因为根据验证 utf8 的正则表达式代码它不会出现成为。 xml 是一个快速示例(更旨在显示字符出现的位置),因此不太在意完整的结构。用 xml 中的 ' 替换 ' char 可以让它在它们的末尾解析得很好。但是,在成功解析了 c++、java 和 c# 应用程序中的 xml 文档后,我很乐意假设问题出在他们的解析器而不是 ' 。
猜你喜欢
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多