2012-01-06 18 views
1

Delphi EnvironementをDelphi2007からDelphi XE2に移行しようとしています。我々は、Sourceforgeから最新のTurbopower xmlパートナーを立ち上げました。ネット。我々は、XMLファイルをロードするための簡単なテストをするとき、私たちは、変数「Textxml」型はAnsiString型に変更されたときにコードがステップ2で失敗コードDelphi XE 2でTurbopower XMLパートナーを使用

var 
    testxml : UnicodeString; // a normal String in Xe2 
    FModel: TXpObjModel; 
begin 
    FModel := TXpObjModel.Create(nil); //Step 1 
    FModel.LoadMemory(testxml[1], Length(testxml)); //Step2 
end. 

の私達のラインを「無効なXML文字が見つかった」というエラーが表示されます次に、xmlが適切にロードされます。

XMLエンコーディングUTF-8

この

<?xml version="1.0" encoding="UTF-8"> 

のようなものはとてもいずれかはUnicode文字列変数の型に格納されたXMLデータをロードする方法をご提案することができますか?

+2

Turbo Power XMLパートナーをドロップし、タイプのないパラメータを呼び出したり、バイトバッファ管理を自分で処理したりする必要のないOmniXMLに進むことをお勧めします。どのような醜いAPI。 –

+0

@WarrenPがここにあります。ターボパワーのものは死んでいるので、積極的に管理されているXMLライブラリに移行しようとするべきです。 –

+0

Delphi 2009とXE、そしてXE2でXML Partner COMPILESは正常に機能しますが、完全にUnicode対応であり、Unicode対応ではありません。このようなことは、特に古くから積極的に利用されている他の技術では想定されるべきではありません。 –

答えて

2

あなたが好きな、戻ってUTF8にUnicode文字列を変換しようとすることができます:メモリ内の文字列の実際の大きさは長さ*にSizeOfあるので

var 
    textxml: UnicodeString; 
    textutf: UTF8String; 
    FModel: TXpObjModel; 
begin 
    textutf := Utf8Encode(textxml); 
    FModel := TXpObjModel.Create(nil); //Step 1 
    FModel.LoadMemory(textutf[1], ByteLength(textutf)); //Step2 
end; 

また、あなたは、バイト長()機能を使用する必要があります(CharType)。

+1

' textutf:= textxml'と書くだけで、コンパイラに仕事をさせることができます –

+0

明示的は暗黙的よりも良い – arthurprs

+0

うん、私はおそらく反射であなたに同意すると思います –

関連する問題