Perl中的JSON编码/解码utf8字符串

詹斯

我从命令行utf8编码的字符串传递到Perl程序中:

> ./test.pl --string='ḷet ūs try ṭhiñgs'

这似乎可以正确识别字符串:

use utf8;  

GetOptions(                                                                     
    'string=s' => \$string,                                                     
) or die;                                                                    
print Dumper($string);
print Dumper(utf8::is_utf8($string));                                           
print Dumper(utf8::valid($string));                                             

印刷

$VAR1 = 'ḷet ūs try ṭhiñgs';
$VAR1 = '';
$VAR1 = 1;

当我将此字符串存储到哈希中并在其上调用encode_json时,该字符串似乎已被再次编码,而to_json似乎有效(如果我正确读取了输出):

my %a = ( 'nāme' => $string ); # Note the Unicode character                                                 
print Dumper(\%a);
print Dumper(encode_json(\%a));                                                 
print Dumper(to_json(\%a));                                                     

印刷

$VAR1 = {
          "n\x{101}me" => 'ḷet ūs try ṭhiñgs'
        };
$VAR1 = '{"nāme":"ḷet Å«s try á¹­hiñgs"}';
$VAR1 = "{\"n\x{101}me\":\"\x{e1}\x{b8}\x{b7}et \x{c5}\x{ab}s try \x{e1}\x{b9}\x{ad}hi\x{c3}\x{b1}gs\"}";

但是,将其转换回原始哈希似乎不适用于这两种方法,并且在两种情况下均无法实现哈希,字符串和破损:

print Dumper(decode_json(encode_json(\%a)));                                    
print Dumper(from_json(to_json(\%a)));    

印刷

$VAR1 = {
           "n\x{101}me" => "\x{e1}\x{b8}\x{b7}et \x{c5}\x{ab}s try \x{e1}\x{b9}\x{ad}hi\x{c3}\x{b1}gs"
        };
$VAR1 = {
          "n\x{101}me" => "\x{e1}\x{b8}\x{b7}et \x{c5}\x{ab}s try \x{e1}\x{b9}\x{ad}hi\x{c3}\x{b1}gs"
        };

哈希查找$a{'nāme'}现在失败。

问题:如何在Perl中正确处理utf8编码和字符串以及JSON编码/解码?

马特·雅各布

您需要解码输入:

use Encode;

my $string;
GetOptions('string=s' => \$string) or die;
$string = decode('UTF-8', $string);

放在一起,我们得到:

use strict;
use warnings;
use 5.012;
use utf8;

use Encode;
use Getopt::Long;
use JSON;

my $string;
GetOptions('string=s' => \$string) or die;
$string = decode('UTF-8', $string);

my %hash = ('nāme' => $string);
my $json = encode_json(\%hash);
my $href = decode_json($json);

binmode(STDOUT, ':encoding(utf8)');
say $href->{nāme};

例子:

$ perl test.pl --string='ḷet ūs try ṭhiñgs'
ḷet ūs try ṭhiñgs

确保您的源文件实际上被编码为UTF-8!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Perl中的JSON编码/解码utf8字符串

来自分类Dev

如何从十六进制编码的字符串解码为UTF-8字符串

来自分类Dev

UTF8字符串为int

来自分类Dev

Swift 2 Json utf8字符串字符错误

来自分类Dev

解码流中的 utf8 字符串数组

来自分类Dev

如何知道Javascript字符串中是否有UTF8字符?

来自分类Dev

正确处理从json.net接收到的utf8字符串

来自分类Dev

从MPMoviePlayerController元数据中的UTF8字符串中快速读取

来自分类Dev

在utf8中编码字节字符串

来自分类Dev

为什么在Julia中不建议对UTF8字符串进行索引?

来自分类Dev

如何在python中构建utf8字符串

来自分类Dev

在Microsoft本地数据库中读写utf8字符串

来自分类Dev

如何在OS X终端中显示UTF8字符串

来自分类Dev

QT应用翻译中的UTF8字符串显示错误

来自分类Dev

无法确定MySQL或PHP是否对UTF8字符串进行了错误编码

来自分类Dev

MSVC UTF8字符串编码使用不正确的代码点

来自分类Dev

无法确定MySQL或PHP是否对UTF8字符串进行了错误编码

来自分类Dev

Perl DBI,MySQL中使用ő和ű字符的UTF8字符编码

来自分类Dev

Perl DBI,MySQL中使用ő和ű字符的UTF8字符编码

来自分类Dev

utf16字符串作为utf8字符串的长度

来自分类Dev

PHP json_encode将utf8字符串转换为字符代码

来自分类Dev

UTF8字符编码错误

来自分类Dev

在Python 3中,如何从字符串中删除所有非UTF8字符?

来自分类Dev

如何在一个4字节长的char之间解码在两个缓冲区中分割的utf8编码的字符串?

来自分类Dev

如何删除python字符串的最后utf8字符

来自分类Dev

Swift UTF8编码和非UTF8字符

来自分类Dev

直接从Web服务调用中获取UTF8字符串,而无需转换为String

来自分类Dev

Ruby将UTF-8字符串编码为UTF-16

来自分类Dev

流到UTF8字符串,不带字节[]

Related 相关文章

  1. 1

    Perl中的JSON编码/解码utf8字符串

  2. 2

    如何从十六进制编码的字符串解码为UTF-8字符串

  3. 3

    UTF8字符串为int

  4. 4

    Swift 2 Json utf8字符串字符错误

  5. 5

    解码流中的 utf8 字符串数组

  6. 6

    如何知道Javascript字符串中是否有UTF8字符?

  7. 7

    正确处理从json.net接收到的utf8字符串

  8. 8

    从MPMoviePlayerController元数据中的UTF8字符串中快速读取

  9. 9

    在utf8中编码字节字符串

  10. 10

    为什么在Julia中不建议对UTF8字符串进行索引?

  11. 11

    如何在python中构建utf8字符串

  12. 12

    在Microsoft本地数据库中读写utf8字符串

  13. 13

    如何在OS X终端中显示UTF8字符串

  14. 14

    QT应用翻译中的UTF8字符串显示错误

  15. 15

    无法确定MySQL或PHP是否对UTF8字符串进行了错误编码

  16. 16

    MSVC UTF8字符串编码使用不正确的代码点

  17. 17

    无法确定MySQL或PHP是否对UTF8字符串进行了错误编码

  18. 18

    Perl DBI,MySQL中使用ő和ű字符的UTF8字符编码

  19. 19

    Perl DBI,MySQL中使用ő和ű字符的UTF8字符编码

  20. 20

    utf16字符串作为utf8字符串的长度

  21. 21

    PHP json_encode将utf8字符串转换为字符代码

  22. 22

    UTF8字符编码错误

  23. 23

    在Python 3中,如何从字符串中删除所有非UTF8字符?

  24. 24

    如何在一个4字节长的char之间解码在两个缓冲区中分割的utf8编码的字符串?

  25. 25

    如何删除python字符串的最后utf8字符

  26. 26

    Swift UTF8编码和非UTF8字符

  27. 27

    直接从Web服务调用中获取UTF8字符串,而无需转换为String

  28. 28

    Ruby将UTF-8字符串编码为UTF-16

  29. 29

    流到UTF8字符串,不带字节[]

热门标签

归档