私は最近、iOS をターゲットにするために、Delphi XE7 に含まれている OmniXML を使用するように切り替えました。XML データはクラウド サービスから取得され、base64 でエンコードされたバイナリ データを含むノードが含まれます。
XMLDocument.LoadFromStream を呼び出すと、この例外"Invalid Unicode Character value for this platform"
が発生します。失敗したのは、この base64 改行シーケンスのようです。
base64 データを持つノードは次のようになります。
<data>TVRMUQAAAAIAAAAAFFo3FAAUAAEA8AADsAAAAEAAAABAAHAAwABgAAAAAAAAAAAQEBAAAAAAAA
AAMQAAABNUgAAP/f/AAMABAoAAAAEAAAAAEVNVExNAAAAAQAAAAAUWjcUABQAAQD/wAA
AAA=</data>
の次の行までたどりましたXML.Internal.OmniXML
。
psCharHexRef:
if CharIs_WhiteSpace(ReadChar) then
raise EXMLException.CreateParseError(INVALID_CHARACTER_ERR, MSG_E_UNEXPECTED_WHITESPACE, [])
else
begin
case ReadChar of
'0'..'9': CharRef := LongWord(CharRef shl 4) + LongWord(Ord(ReadChar) - 48);
'A'..'F': CharRef := LongWord(CharRef shl 4) + LongWord(Ord(ReadChar) - 65 + 10);
'a'..'f': CharRef := LongWord(CharRef shl 4) + LongWord(Ord(ReadChar) - 97 + 10);
';':
if CharIs_Char(Char(CharRef)) then
begin
Result := Char(CharRef);
Exit;
end
else
raise EXMLException.CreateParseError(INVALID_CHARACTER_ERR, MSG_E_INVALID_UNICODE, []);
が falseであるため発生するのは最後の行の例外ですCharIs_Char(#13)
(ここで #13 は から読み取られた CharRef の値です
) 。
これを解決するにはどうすればよいですか?