C# 知道如何在文档中强制使用utf8吗

C# 知道如何在文档中强制使用utf8吗,c#,utf-8,C#,Utf 8,我正在创建一个xml文档,并尝试将其存储为utf8。但是,我在存储的文档中收到一个非utf8撇号 例如: 我试过以下方法 `System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); var docX = encoding.GetBytes(vdd.ToString()); System.IO.StreamWriter s = new StreamWriter(pathAndFileName, false, enc

我正在创建一个xml文档,并尝试将其存储为utf8。但是,我在存储的文档中收到一个非utf8撇号

例如:

我试过以下方法

`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一样好,但“字符”并不是在我的所有客户机系统上解析的


请帮忙……

编辑:多尔注意到了我在混乱中遗漏的东西;粘贴的示例根本不是XML,因此不会解析。我的答案仍然适用,因为“html编码”和UTF8编码是错误的


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

这不是编码问题。正如双向飞碟所指出的,UTF8可以表示所有Unicode字符,包括那个字符。相反,这是一个。。。嗯。。。编码问题。这就是:XML数据编码问题

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

您使用什么API来构建XML?这应该为您完成,所以您不需要担心编码内容、方式和原因。但是,如果您对
字符进行属性编码,我认为您的问题将停止

假设我理解你的问题

<Name=Dave t="Owner(e.g pete’s)">
docX
vdd
中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撇号”是什么意思?UTF-8可以表示Unicode中的每个字符……您是否真的得到了一个异常?您发布的示例不是XML;XML元素必须具有标记名,并且必须引用属性。你们两个都没有。@Dour High Arch D'oh!抢手货使用xmlwriter和utf8编码,我得到输出答案分数=“4”answerCode=“5”term=“Relations(inc.Parent's)”/这通常显示为使用xmlwriter和utf8编码,我得到输出答案分数=“4”answerCode=“5”term=“Relations(inc.Parent's)”/这通常显示为我尝试使用xmlwriter,streamwriter和xdocument.save。。。在所有情况下,'仍然出现在返回的xml中。@Jon Skeet'字符是从数据表中提取的字符串的一部分。我试图用ciorrect编码替换这些值,但VS找不到它……多亏了演练,代码经常转换为utf8,因此我试图确保“字符”完全是utf8,正如验证utf8的正则表达式代码所示,它似乎不是utf8。xml是一个快速的示例(更旨在显示字符出现的位置),因此不太在意完整的结构。将xml中的“char”替换为“a”,可以使其在末尾进行良好的解析。然而,在C++、java和C语言应用程序中,我已经成功地解析了XML文档,我很高兴地认为问题是他们的解析器不是“。
s.Write(myString);