- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Perl v5.10.1 中,我需要将带有 unicode 字符的 native Perl 结构与 JSON::decode_json
创建的类似结构进行比较。
示例:
use strict; use warnings;
#use utf8;
use JSON;
use Test::Deep qw(cmp_deeply);
cmp_deeply(["1"], JSON::decode_json('["1"]'), 'utf8 test 11'); # will pass
cmp_deeply(["≥"], JSON::decode_json('["1"]'), 'utf8 test ≥1'); # will fail
cmp_deeply(["1"], JSON::decode_json('["≥"]'), 'utf8 test 1≥'); # will fail
cmp_deeply(["≥"], JSON::decode_json('["≥"]'), 'utf8 test ≥≥'); # should pass
我无法解释最后一个案例发生了什么,为什么这两个结构不相等?我尝试过了 R T F M这并没有真正提高我对这个问题的理解。
这是输出(由于 TAP 太冗长而稍作编辑):
ok 1 - utf8 test 11
not ok 2 - utf8 test ≥1
# Compared $data->[0]
# got : '≥'
# expect : '1'
not ok 3 - utf8 test 1≥
Wide character in print at Test/Builder.pm line 1698.
# Compared $data->[0]
# got : '1'
# expect : '≥'
not ok 4 - utf8 test ≥≥
Wide character in print at Test/Builder.pm line 1698.
# Compared $data->[0]
# got : 'â¥'
# expect : '≥'
<小时/>
当我使用 use utf8;
尝试时,情况更糟(脚本在第二次测试后死亡):
ok 1 - utf8 test 11
not ok 2 - utf8 test ≥1
Wide character in print at Test/Builder.pm line 1698.
Wide character in print at Test/Builder.pm line 1698.
Wide character in print at Test/Builder.pm line 1698.
# Compared $data->[0]
# got : '≥'
# expect : '1'
Wide character in subroutine entry at ...
# Tests were run but no plan was declared and done_testing() was not seen.
我还尝试了一种适用于比较的解决方法..
use utf8;
cmp_deeply(["≥"], JSON->new->utf8(0)->decode('["≥"]'), 'utf8 test ≥≥');
...但我仍然收到愚蠢的警告:
ok 1 - utf8 test ≥≥
Wide character in print at Test/Builder.pm line 1698.
有没有办法让它工作 - 比如 use magic_unicode_solution;
?
或者也许我应该以不同的方式进行测试以使其与 Unicode 兼容?
最佳答案
此测试将通过:
use Encode;
cmp_deeply( [ Encode::decode("utf8","≥") ],
JSON::decode_json('["≥"]'), 'utf8 test ≥≥');
JSON 解码器将输入视为 UTF-8 编码并返回解码后的字符串。您的原始测试(测试 4)将 UTF-8 编码的字符串(两个八位字节)与解码的字符串(单个宽字符)进行比较。
关于perl - 当我使用 JSON::decode_json 时,Test::Deep::cmp_deeply 中 unicode 字符串的比较失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25043579/
看起来像Test::Deep灵感来自 is_deeply .我的问题是如何使 cmp_deeply 成为测试的一部分而不是单独测试?因为我的测试列表只有 8 个,但每次我使用 cmp_deeply 时
在 Perl v5.10.1 中,我需要将带有 unicode 字符的 native Perl 结构与 JSON::decode_json 创建的类似结构进行比较。 示例: use strict; u
我是一名优秀的程序员,十分优秀!