首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unicode字符"“有什么特别之处,以至于它破坏了基于大括号的解析器逻辑?

Unicode字符"“有什么特别之处,以至于它破坏了基于大括号的解析器逻辑?
EN

Stack Overflow用户
提问于 2019-06-12 22:00:28
回答 1查看 579关注 0票数 2

我正试图调试一个奇怪的问题,希望这里的Unicode专家能够提供帮助。

  • 我有一个(基于Perl的)发送程序,它采用一些数据结构。
  • 它将数据结构编码成专用的序列化格式,使用大括号对数据进行编码。下面是一个序列化字符串示例:{{9}{{8}{{skip_association}{{0}{}}}{{data}{{9}{{1}{{exceptions}{{9}{{1}{{-472926}{{9}{{1}{{AAAAAAYQ2}
  • 然后将序列化的字符串发送到Java服务器
  • Java服务器试图将字符串反序列化回数据结构.
  • 除了使用字段长度作为编码数据的一部分之外,编码实际上并不重要(imho);例如,{{id}{{7}9{Z928D2AA2}}}是指名为"id“的字段,类型为" string”(7)、字符串长度9、值Z928D2AA2。

问题:当被序列化的数据结构包含一些特定的Unicode字符时,反序列化失败。

具体来说,这个字符:"“(各种在线解码器以%820x82的形式显示)引起了问题。

我试图理解为什么这会是一个问题,以及这个字符有什么特别之处--还有其他Unicode字符不会破坏反序列化程序。

(又名0x82) Unicode字符有什么特别之处,它会干扰解析依赖于大括号作为分隔符和字段长度的序列化字符串吗?

不幸的是,我无法调试decodig库,因此我只得到一个通用错误消息,即解码失败了,而不知道它失败了什么。

P.P.S加倍好奇:当我在题名中使用这个字符时,它会在预览版中打印出来,但在问题发布时被删除了!当我试图将字符串复制/粘贴到编辑器时,与编码的字符串长度相比,它们的测量长度是正确的。

P.S.据我所知,执行序列化的Perl代码完全符合Unicode标准:

代码语言:javascript
复制
use open      qw(:std :utf8);    # undeclared streams in UTF-8
use charnames qw(:full :short);  # unneeded in v5.16
use Encode qw(decode);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 22:44:15

您可以在unicode字符数据库中看到有关字符的信息;它的文本转储可以在https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt中找到,其中显示:

代码语言:javascript
复制
0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;

字段的含义可以在http://www.unicode.org/reports/tr44/#UnicodeData.txt中找到(尽管这似乎忽略了第一个字段,即代码点)。

因此,它是一个“其他”类控制字符,具有双向类别“边界中立”(对于Cc或Cf类字符来说是正常的)。它没有什么特别之处。

但作为一个控制角色,我并不感到惊讶的是,期待文本数据有问题。

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

https://stackoverflow.com/questions/56570919

复制
相关文章

相似问题

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