2

私は文字列リストを使用して単純なxmlを作成し、Addを介してノードを挿入してUTF8でエンコードされたxmlを作成していました

例えば。

    myXML.Add('<myNode>'+UTF8Encode('υτφ8στρινγ')+'</myNode>');

ただし、よりクリーンなコードと汎用性を備えた IXMLDocument フォームに切り替えたいと考えていました

Delphiで単純なxmlを作成しています

procedure myxml;
var
  xmlDoc : IXMLDocument;
  xNode : IXMLNode;
begin
  xmlDoc := TXMLDocument.Create(nil);
  try
    xmlDoc.Active := TRUE;
    xmlDoc.Version := '1.0';
    xmlDoc.Encoding := 'utf-8';
    xNode := xmlDoc.AddChild('myNode');
    xNode.Text := UTF8Encode('υτφ8στρινγ'); //greek chars
    xmlDoc.XML.SaveToFile('test.xml');  
  finally
    FreeAndNil(xmlDoc);
  end;
end;

問題は、出力 XML が UTF-8 で 2 回エンコードされていることです。問題は、デフォルトで(MSXML.save()を介して)UTF-8でエンコードするMSXMLに関係していると思います。

だから私が必要としているのは、どういうわけかMSXMLにXMLをエンコードさせずにヘッダーを持たせることです

    <?xml version="1.0" encoding="utf-8"?>
4

1 に答える 1

2

問題は、UTF-8 エンコーディングを実行してはならないことです。文字列を XML ライブラリに渡し、エンコーディングを実行させます。だから、交換

xNode.Text := UTF8Encode('υτφ8στρινγ');

xNode.Text := 'υτφ8στρινγ';

への呼び出しを削除する必要がありますFreeAndNil。インターフェイス参照を渡していますが、これFreeAndNilはオブジェクト インスタンス参照用です。単にそれを削除して、インターフェイス参照カウント コードにその作業を行わせます。

于 2013-06-14T11:42:18.043 に答える