C#将字符串转换为字节,然后返回到使用默认编码器的字符串

时间:2013-11-12 22:36:27

标签: c# encoding

我正在对客户端报告的一个奇怪问题进行故障排除,该问题是由尝试解析无效XML的应用程序引起的。我认为根本原因与XML字符串如何编码然后解码有关。我有一个内部API获取XML字符串(我知道它开始有效),然后将其转换为字节数组并用只读MemoryStream包装它。然后在另一侧,流被转换回字符串,然后传递给XDocument.Parse(string)。后一个调用失败,说“根级别的数据无效。第1行,第1位”。无论如何,我认为根本原因与我如何编码然后解码字符串有关。实际上,以下调试代码行返回的字符串与传入的字符串不同。

Encoding.Default.GetString(Encoding.Default.GetBytes(GetMeAnXmlString())));

在进入的路上使用Encoding.Default然后退出会产生与我开始时不同的字符串。那是疯狂的。有什么想法吗?

注意:

我正在使用一个我无法更改的API,它会检索包含XML的流,因此我无法更改Encoding.Default的使用。如果一切正常,那么这样做会给生产问题带来风险(a.k.a showstoppers)。

1 个答案:

答案 0 :(得分:7)

由于Weeble提到的代码页面方面,Encoding.Default很粗略。

http://msdn.microsoft.com/en-us/library/system.text.encoding.default%28v=vs.110%29.aspxhttp://blogs.msdn.com/b/shawnste/archive/2005/03/15/don-t-use-encoding-default.aspx

你决定使用Encoding.Unicode或Encoding.UTF8可能会更好。