【发布时间】:2020-07-29 01:38:04
【问题描述】:
我有如下所示的哈希键:
1я310яHOM_REF_truth:HOM_ALT_test:discordant_hom_ref_to_hom_altяAяC
这是一个由西里尔字母 я 连接的字符串,我选择它作为分隔符,因为它永远不会出现在此文件中。
因此,我将其写入 Perl 5.30.2 中的 JSON 文件:
use JSON 'encode_json';
sub hash_to_json_file {
my $hash = shift;
my $filename = shift;
my $json = encode_json $hash;
open my $out, '>', $filename;
say $out $json
}
在 python 3.8 中:
use json
def hash_to_json_file(hashtable,filename):
json1=json.dumps(hashtable)
f = open(filename,"w+")
print(json1,file=f)
f.close()
当我尝试将 Python 编写的 JSON 加载回 Perl 脚本时,我看到一个我不知道如何解决的神秘错误:
Wide character in say at read_json.pl line 27.
阅读https://perldoc.perl.org/perlunifaq.html 我尝试将use utf8 添加到我的脚本中,但它不起作用。
我也在我的子例程中尝试了'>:encoding(UTF-8)',但同样的错误结果。
检查 JSON 文件后,我看到 "1Ñ180ÑHET_ALT_truth:HET_REF_test:discordant_het_alt_to_het_refÑAÑC,G" 之类的键,其中 ÑAÑ 替换了 я。在python写的JSON中,看到\u044f,我认为这是wide这个字符,但是不知道怎么改回来。
我也尝试过改变我的子程序:
use Encode 'decode';
sub json_file_to_hash {
my $file = shift;
open my $in, '<:encoding(UTF-8)', $file;
my $json = <$in>;
my $ref = decode_json $json;
$ref = decode('UTF-8', $json);
return %{ $ref }
}
但这给出了另一个错误:
Wide character in hash dereference at read_json.pl line 17, <$_[...]> line 1
如何将 python JSON 正确读入 Perl?
【问题讨论】: