2012-01-19 4 views
3

は、私は文字列に次のXMLを持っていると言う:xml文字列をUTF-8エンコードUTF-16でどのように変換しますか?例えば

私はXML列を持つSQL Server 2005のデータベーステーブルにこれを挿入しようとすると、私は次のようなエラー(I」を取得しますm)のEF 4.1を使用して、私は問題はないと思います。

XMLの解析:いくつかの研究を行った後の符号化

を切り替えることができませんでしライン1、文字38は、私はそのSQLを学びましたServerはXMLがUTF-16であることを期待しています。どのように私はそれを変換するのですか?

答えて

2

私の最初のいくつかの試みは、ストリーム、バイト配列、および多くのエンコーディングの問題でした。 .NETの文字列はすでにUTF-16なので、xml宣言だけを変更する必要があることが分かります。

答えは実際には非常に簡単です。文字列をXmlDocumentにロードし、宣言を変更してOuterXmlを取得する拡張メソッドを次に示します。

public static class XmlDocumentExtensions 
{ 
    public static string ToEncoding(this XmlDocument document, Encoding encoding) 
    { 
     if (document.FirstChild.NodeType == XmlNodeType.XmlDeclaration) 
     { 
      XmlDeclaration xmlDeclaration = (XmlDeclaration)document.FirstChild; 
      if (String.Compare(xmlDeclaration.Encoding, encoding.WebName, StringComparison.OrdinalIgnoreCase) != 0) 
      { 
       xmlDeclaration.Encoding = encoding.WebName; 
       return document.OuterXml; 
      } 
     } 

     return document.OuterXml; 
    } 
} 

あなたはそうのようにそれを使用することができます:

XmlDocument document = new XmlDocument(); 
document.LoadXml(xml); 
xml = document.ToEncoding(Encoding.Unicode);