2013-09-23 50 views
0

我想用下面的代碼使用utf-8編碼我的xml文本。出於某種原因,我得到了utf-16而不是utf-8。任何理由爲什麼請?XML錯誤的UTF編碼

 StringWriter writer = new StringWriter(); 
     xdoc.Save(writer); 
     writer.Flush(); 
     string xml = writer.ToString(); 
     byte[] bytes = Encoding.UTF8.GetBytes(xml); 
     System.IO.File.WriteAllBytes(pathDesktop + "\\22CRE002.XPO", bytes); 

回答

0

StringWriter本身 「通告」(通過TextWriter.Encoding屬性)UTF-16的編碼,所以XmlWriter檢測到並相應地修改XML聲明。實際上,您將數據寫爲UTF-8 - 這只是XML文件本身會聲明(錯誤地)它是UTF-16,導致各種錯誤。

的選項有:

  • 使用的StringWriter子類,通過重寫Encoding財產
  • 通告不同的編碼就繞過StringWriter完全和直接寫入文件。

個人而言,我會選擇第二個選項去:

using (var writer = XmlWriter.Create(Path.Combine(pathDesktop, "22CRE002.XPO")) 
{ 
    xdoc.Save(writer); 
} 

爲什麼第一緩衝這一切的記憶?請注意,如果您未指定編碼,XmlWriter將已經默認爲UTF-8。

+0

所以我應該有這樣的事情? 使用(VAR作家= XmlWriter.Create(Path.Combine(pathDesktop 「22CRE002.XPO」)) { xdoc.Save(作家); } writer.Flush(); 串XML =作家。的ToString(); 字節[]字節= Encoding.UTF8.GetBytes(XML); System.IO.File.WriteAllBytes(pathDesktop + 「\\ 22CRE002.XPO」,字節); 請指定非常感謝 –

+0

喔對於代碼感到抱歉:/你能給我怎樣的代碼來修改我的代碼: –

+0

@MarkFenech:不,我給你的代碼是* complete *代碼。根本不要使用StringWriter如果你確實需要一個字符串,請解釋一下w hy - 你還沒有真正指定你的要求 –