我想知道为什么有些德国变形金刚在我们的页面上乱成一团.然后我发现最新版本的JSON(我使用2.07)确实以不同于JSON 1.5的方式转换字符串.
这里的问题是我有一个像字符串一样的哈希
use Data::Dumper;
my $test = {
'fields' => 'überrascht'
};
Run Code Online (Sandbox Code Playgroud)
print Dumper(to_json($test)); 给我
$VAR1 = "{ \"fields\" : \"\x{fc}berrascht\" } ";
Run Code Online (Sandbox Code Playgroud)
使用旧模块
$json = JSON->new();
print Dumper ($json->to_json($test));
Run Code Online (Sandbox Code Playgroud)
给我(正确的结果)
$VAR1 = '{"fields":[{"title":"überrascht"}]}';
Run Code Online (Sandbox Code Playgroud)
所以变音符号使用新的JSON 2模块进行了混乱.
我需要什么才能使它们正确?
更新:使用Data :: Dumper显示输出可能不好,因为Dumper使用自己的编码.好吧,Dumper的结果差异表明在这里对待任何事情都是不同的.如Brad提到的那样描述后端可能更好:使用Template-Toolkit打印json字符串,然后将其分配给javascript变量以供进一步使用.正确的javascript显示这样的东西
{
"title" : "Geändert",
},
Run Code Online (Sandbox Code Playgroud)
使用我得到的新模块
{
"title" : "Geändert",
},
Run Code Online (Sandbox Code Playgroud)
目标页面位于8859-1(latin1).有什么建议?
\x{fc}是ü,至少在Latin-1,Latin-9等.此外,ü是U+00FCUnicode中的代码点.但是,我们想要UTF-8(我想).获取UTF-8字符串文字的最简单方法是使用此编码保存Perl源代码,并将其放在use utf8;脚本的顶部.
然后,将字符串编码为JSON会产生正确的输出:
use strict; use warnings; use utf8;
use Data::Dumper; use JSON;
print Dumper encode_json {fields => "nicht überrascht"};
Run Code Online (Sandbox Code Playgroud)
该encode_json假设UTF-8.阅读文档以获取更多信息.
输出:
$VAR1 = '{"fields":"nicht überrascht"}';
Run Code Online (Sandbox Code Playgroud)
(JSON模块版本:2.53)
my $json_text = to_json($data);
Run Code Online (Sandbox Code Playgroud)
是的缩写
my $json_text = JSON->new->encode($data);
Run Code Online (Sandbox Code Playgroud)
这将返回一串Unicode代码点.U + 00FC确实是"ü"的正确Unicode代码点,因此输出是正确的.(作为证据,HTML源代码实际上是"ü".)
很难说出原始输出实际包含的内容(因为您显示的是非ASCII字符),因此很难确定您的问题实际上是什么.
但有一点必须outputing字符串之前要做的就是把它从代码点的字符串转换为字节,说,通过使用编码的encode或encode_utf8.
my $json_cp1252 = encode('cp1252', to_json($data));
my $json_utf8 = encode_utf8(to_json($data));
Run Code Online (Sandbox Code Playgroud)
如果适当的编码是UTF-8,您还可以使用以下任何一种:
my $json_utf8 = to_json($data, { utf8 => 1 });
my $json_utf8 = encode_json($data);
my $json_utf8 = JSON->new->utf8->encode($data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |