我最近转而使用 Delphi XE7 附带的 OmniXML,以允许针对 iOS。XML 数据来自云服务,包括带有 base64 编码二进制数据的节点。
现在我"Invalid Unicode Character value for this platform"
在调用 XMLDocument.LoadFromStream 时遇到了这个异常,这似乎是这个 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, []);
这是最后一行中的异常,因为CharIs_Char(#13)
它是 false (其中 #13 是从中读取的 CharRef 的值
)
我该如何解决这个问题?