首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OmniXML on iOS:无效Unicode

OmniXML on iOS:无效Unicode
EN

Stack Overflow用户
提问于 2015-05-04 14:55:58
回答 1查看 338关注 0票数 2

最近,我切换到使用德尔菲XE7中包含的XE7,以允许针对iOS。XML数据来自云服务,包括具有base64编码的二进制数据的节点。

现在,我在调用"Invalid Unicode Character value for this platform"时得到了这个exeception XMLDocument.LoadFromStream,并且似乎是这个base64换行序列失败了:

具有base64数据的节点看起来类似于以下内容:

代码语言:javascript
复制
<data>TVRMUQAAAAIAAAAAFFo3FAAUAAEA8AADsAAAAEAAAABAAHAAwABgAAAAAAAAAAAQEBAAAAAAAA&#xD;
AAMQAAABNUgAAP/f/AAMABAoAAAAEAAAAAEVNVExNAAAAAQAAAAAUWjcUABQAAQD/wAA&#xD;
AAA=</data>

我把它追溯到XML.Internal.OmniXML中的这些行

代码语言:javascript
复制
  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是从&#xD;读取的CharRef的值)。

我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 16:13:40

这显然是OmniXML中的一个bug。看起来,开发人员试图实现XML1.0 哪个州

...XML处理器必须接受为Char指定范围内的任何字符。 字符范围 2 ::= #x9 #xA #xD #x20-#xD7FF #xA 000-#xFFFD#x10000-#x10 FFFF /*任何Unicode字符,不包括代理项块、FFFE和FFFF。*/

但是,CharIs_Char的实现如下所示:

代码语言:javascript
复制
function CharIs_Char(const ch: Char): Boolean;
begin
  // [2] Char - any Unicode character, excluding the surrogate blocks, FFFE, and FFFF
  Result := not Ch.IsControl;
end;

这不包括所有控制字符,包括#x9(TAB)、#xA(LF)和#xD(CR)。事实上,由于XML条带(或可选择地用LF替换)在解析期间返回回文,因此包含实际回车的唯一方法是在实体值文字中使用字符引用(规范第2.3节)。

这似乎是一个展示,并应提交作为一份QC报告。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30033288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档