私は Delphi XE5 に取り組んでおり、IDHTTP を使用してサーバーから XML を取得しています。XML の取得は正常に機能しますが、壊れた文字がいくつかあります。文字は '•' (箇条書き) です。他は問題ありませんが、箇条書きが壊れています。
以下のようにIDHTTPを作成しました。
idhttps := TIdHTTP.Create();
idhttps.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
idhttps.IOHandler.DefStringEncoding := IndyTextEncoding(TEncoding.UTF8);
idhttps.HandleRedirects := True;
idhttps.ConnectTimeout := 5000;
idhttps.Request.USERNAME := 'USERNAME';
idhttps.Request.PASSWORD := 'PASSWORD';
idhttps.Request.BasicAuthentication := True;
idhttps.Request.Accept := 'text/xml';
そして、以下のようなxmlを取得します:
SS := TStringStream.Create('', TEncoding.UTF8);
try
self.GetIdHTTPForLexicomp.Get(URL, SS);
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.LoadFromStream(SS, TXMLEncodingType.xetUTF_8Like);
finally
SS.Free;
end;
XML では、箇条書きは次のように表示されます。
? アナフィラキシー/過敏症: 過敏症反応を引き起こす可能性があります。
XML ヘッダーは以下のとおりです。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
何を確認すればよいですか?
更新: XML スニペットを追加しました。スタイル用の XSL ファイルが必要ですが、この場合は問題ないと思います。'?' キャラ崩壊です。
<?xml version="1.0" standalone="yes"?>
<ns2:monogragh>
<monograghFields>
<field fieldId="234837" fieldTypeCode="war" created="2005-04-07T17:28:33Z" modified="2014-10-02T11:32:57Z" sectionId="0">
<fieldName>Warnings/Precautions</fieldName>
<content>
<div id="war" class="block">
<p style="text-indent:-2em;margin-left:2em;text-align:justify;">
<b>
<i>Concerns related to adverse effects:</i>
</b>
</p>
<p style="text-indent:-2em;margin-left:4em;text-align:justify;">
? Anaphylaxis/hypersensitivity: May cause hypersensitivity reactions, including anaphylaxis; use with caution in patients with anaphylactic disorders.
</p>
</div>
</content>
</field>
</monograghFields>
</ns2:monogragh>
間違った情報を流したようです。キャプチャした xml スニペットを添付しました。最初のものは REST クライアント ツールを使用してブラウザから取得した結果であり、最後のものは idhttp を介して xml を取得した結果です。