gpt4 book ai didi

perl - 写入文件时奇怪地显示西里尔符号

转载 作者:行者123 更新时间:2023-12-01 15:19:32 25 4
gpt4 key购买 nike

我有一个包含 UTF-8 字符的字符串字段 input 的类。我的类还有一个方法 toString。我想使用 toString 方法将类的实例保存到一个文件中。问题是文件中写入了奇怪的符号:

my $dest = "output.txt";

print "\nBefore saving to file\n" . $message->toString() . "\n";

open (my $fh, '>>:encoding(UTF-8)', $dest)
or die "Cannot open $dest : $!";

lock($fh);
print $fh $message->toString();
unlock($fh);
close $fh;

第一次打印效果很好

Input: {"paramkey":"message","paramvalue":"здравейте"}

正在打印到控制台。问题是当我写入文件时:

Input: {"paramkey":"message","paramvalue":"здÑавейÑе"}

我用了flock用于锁定/解锁文件。

最佳答案

toString 方法返回的字符串内容已经采用 UTF-8 编码。当您将它打印到您的终端时,它工作正常,因为它需要 UTF-8 数据。但是当你用

打开你的输出文件时
open (my $fh, '>>:encoding(UTF-8)', $dest) or die "Cannot open $dest : $!"

您要求 Perl 将数据重新编码为 UTF-8。这会将 UTF-8 编码数据的每个字节转换为单独的 UTF-8 序列,这根本不是您想要的。很遗憾,您没有显示 $message 所属类的代码,因此我无法帮助您

您可以通过将 open 调用更改为

来解决此问题
open (my $fh, '>>', $dest) or die "Cannot open $dest : $!"

这将避免额外的编码步骤。但是您确实应该在整个 Perl 代码中使用未编码的字符:从您正在读取的文件中删除任何编码,并在写入输出文件时根据需要对输出数据进行编码。

关于perl - 写入文件时奇怪地显示西里尔符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39296232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com