我正试图调试一个奇怪的问题,希望这里的Unicode专家能够提供帮助。
{{9}{{8}{{skip_association}{{0}{}}}{{data}{{9}{{1}{{exceptions}{{9}{{1}{{-472926}{{9}{{1}{{AAAAAAYQ2}{{id}{{7}9{Z928D2AA2}}}是指名为"id“的字段,类型为" string”(7)、字符串长度9、值Z928D2AA2。问题:当被序列化的数据结构包含一些特定的Unicode字符时,反序列化失败。
具体来说,这个字符:"“(各种在线解码器以%82或0x82的形式显示)引起了问题。
我试图理解为什么这会是一个问题,以及这个字符有什么特别之处--还有其他Unicode字符不会破坏反序列化程序。
(又名0x82) Unicode字符有什么特别之处,它会干扰解析依赖于大括号作为分隔符和字段长度的序列化字符串吗?
不幸的是,我无法调试decodig库,因此我只得到一个通用错误消息,即解码失败了,而不知道它失败了什么。
P.P.S加倍好奇:当我在题名中使用这个字符时,它会在预览版中打印出来,但在问题发布时被删除了!当我试图将字符串复制/粘贴到编辑器时,与编码的字符串长度相比,它们的测量长度是正确的。
P.S.据我所知,执行序列化的Perl代码完全符合Unicode标准:
use open qw(:std :utf8); # undeclared streams in UTF-8
use charnames qw(:full :short); # unneeded in v5.16
use Encode qw(decode);发布于 2019-06-12 22:44:15
您可以在unicode字符数据库中看到有关字符的信息;它的文本转储可以在https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt中找到,其中显示:
0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;字段的含义可以在http://www.unicode.org/reports/tr44/#UnicodeData.txt中找到(尽管这似乎忽略了第一个字段,即代码点)。
因此,它是一个“其他”类控制字符,具有双向类别“边界中立”(对于Cc或Cf类字符来说是正常的)。它没有什么特别之处。
但作为一个控制角色,我并不感到惊讶的是,期待文本数据有问题。
https://stackoverflow.com/questions/56570919
复制相似问题