網頁

2011年9月15日 星期四

XmlWriter encoding

Last Update: 2011/09/16 13:44+08

Intro

使用 XmlWriter 需要設置 Encoding 時發生的問題


Content

基本的用法是醬~
var buffer = new StringBuilder();
using (var write = System.Xml.XmlWriter.Create(buffer)){
    write.WriteStartElement("Transaction");
    write.WriteAttributeString("Action", "AskData");
    write.WriteEndElement();
}

如果要加一些參數的話, 就得設置 XmlWriterSettings
var buffer = new StringBuilder();
var setting = new System.Xml.XmlWriterSettings();
setting.Indent = true;
setting.Encoding = new System.Text.UTF8Encoding();
using (var write = System.Xml.XmlWriter.Create(buffer, setting)){
    write.WriteStartElement("Transaction");
    write.WriteAttributeString("Action", "AskData");
    write.WriteEndElement();
}

然後咱們就會發現, Indent 有作用, 但 Encoding 還是 utf-16


這是由於 dotNet 的字串本身就是utf-16編碼
所以咱們需要把 buffer 改成 Stream
var buffer = new System.IO.MemoryStream();

如果看到了如下圖的字串, 開頭有一段不明所以的空白

就是你得到了!! utf-8 的前置識別字元~請把它取消掉~

最後的Code就長醬~
var buffer = new System.IO.MemoryStream();
var setting = new System.Xml.XmlWriterSettings();
setting.Indent = true;
setting.Encoding = new System.Text.UTF8Encoding(false);//取消前置識別字元
using (var write = System.Xml.XmlWriter.Create(buffer, setting)){
    write.WriteStartElement("Transaction");
    write.WriteAttributeString("Action", "AskData");
    write.WriteEndElement();
}

沒有留言:

張貼留言