none
请教如何用LINQ to XML生成GBK编码的XML文件 RRS feed

  • 问题

  • 因为我的系统需要与另一个系统做数据交换,对方通过导入XML文件完成数据导入,但只接受GBK编码的XML文件。
      
    我在项目中通过LINQ to XML创建对方所需的XML结构,代码片段如下:

              XDocument doc = new XDocument
                    (
                    new XDeclaration("1.0", "gbk", "yes"),
                    new XElement("FTFTZ",
                        new XElement("ENVELOPE",
                            new XElement("SENDER", "123456"),
                            new XElement("RECEIVER", "5321"),
                            new XElement("SEND_DATE", "2009-09-06"),
                            new XElement("TYPE", "0"),
                            new XElement("BILL_TYPE", "SI"),
                            new XElement("STATUS", "0"),
                            new XElement("AGENTCY", "YWT")
                            )
                        )
                    );

                    doc.Save(@"C:\TEST.XML");

    但无论我在定义XDeclaration时采用何种编码,最终生成的XML文件中,编码格式都是“utf-8”,生成的XML文件如下所示:

                    <?xml version="1.0" encoding="utf-8"?>
                    <FTFTZ>
                      <ENVELOPE>
                        <SENDER>123456</SENDER>
                        <RECEIVER>5321</RECEIVER>
                        <SEND_DATE>2009-09-06</SEND_DATE>
                        <TYPE>0</TYPE>
                        <BILL_TYPE>SI</BILL_TYPE>
                        <STATUS>0</STATUS>
                        <AGENTCY>YWT</AGENTCY>
                      </ENVELOPE>
                    </FTFTZ>

    请问有什么方法可以让LINQ to XML直接生成GBK编码的XML文件?谢谢。
    2009年9月6日 9:25

答案

  • 可以使用XDocument.Save(XmlWriter)重载~并在XmlWriter.Setting.Encoding中设置编码~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    • 已标记为答案 cxy 2009年9月7日 3:49
    2009年9月6日 15:45
    版主

全部回复

  • 可以使用XDocument.Save(XmlWriter)重载~并在XmlWriter.Setting.Encoding中设置编码~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    • 已标记为答案 cxy 2009年9月7日 3:49
    2009年9月6日 15:45
    版主
  • 谢谢回复,但是我去设置Encoding时,发现并没有GBK编码,只有ASCII、Unicode、UTF7、UTF8、UTF32等,是C#不支持GBK编码吗?
    2009年9月7日 1:58
  • 试试Encoding.GetEncoding("GBK");
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年9月7日 2:26
    版主
  • 我在代码中尝试用Encoding.GetEncoding("GBK"),但是得到的信息却是GB2312编码:

    {System.Text.DBCSCodePageEncoding}
        [System.Text.DBCSCodePageEncoding]: {System.Text.DBCSCodePageEncoding}
        BodyName: "gb2312"
        CodePage: 936
        DecoderFallback: {System.Text.InternalDecoderBestFitFallback}
        EncoderFallback: {System.Text.InternalEncoderBestFitFallback}
        EncodingName: "简体中文(GB2312)"
        HeaderName: "gb2312"
        IsBrowserDisplay: true
        IsBrowserSave: true
        IsMailNewsDisplay: true
        IsMailNewsSave: true
        IsReadOnly: true
        IsSingleByte: false
        WebName: "gb2312"
        WindowsCodePage: 936
    2009年9月7日 2:32
  • GBK是对GB2312的扩展~是GB2312和GB18030这两个标准之间的一个技术规范~在Windows中的CodePage和GB2312一样~是936~可能因为CodePage一样的原因~就把它当GB2312了~

    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年9月7日 2:56
    版主