我正在创建一个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,但是'字符在我的所有客户端系统上都没有解析。
请帮助.....
答案 0 :(得分:0)
很难确切地说出你的问题是什么,但我试图消除一些可能性并提出一种可能性:’
导致你的XML无法正确解析。
这不是编码问题。正如The Skeet所说,UTF8可以代表所有Unicode字符,包括那个字符。相反,这是......嗯...编码问题。那就是:XML数据编码问题。
字符应为属性编码,而不是 html编码
您使用什么API来构建XML?应该为您完成,因此您无需担心编码内容,方式和原因。但是,如果属性编码 ’
字符,我认为您的问题将会停止。
假设我理解你的问题......
答案 1 :(得分:0)
<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());
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。要么修复它,要么找出它们接受的编码并使用它。