提问人:shirha 提问时间:3/18/2023 最后编辑:shirha 更新时间:3/19/2023 访问量:100
如何将 utf8 字符串编写为二进制文件
How to write a utf8 string as binary
问:
我有一个已双重编码为 utf8 的 epub。我想通过解码一次并将其编写为二进制文件来修复它,但我收到“子例程中的宽字符”错误。我正在使用 Mojo::File。
use Mojo::Base -strict;
use Mojo::File;
use Encode qw( decode_utf8 encode_utf8 );
my $in = Mojo::File->new('part0000.html')->slurp();
my $out = decode_utf8($in);
utf8::downgrade($out);
Mojo::File->new('string.html')->spurt($out);
如果我尝试这样做,我会得到同样的错误。
my $in = Mojo::File->new('part0000.html')->slurp();
my $out = encode_utf8(decode_utf8(decode_utf8($in)));
Mojo::File->new('string.htm')->spurt($out);
解码似乎有效,但我不知道如何将其写成二进制。
任何建议都值得赞赏。部分0000.html
答:
-1赞
shirha
3/19/2023
#1
显然,由于“宽字符”,不可能简单地在 Perl 中将 utf8 字符串编写为二进制文件。我用正则表达式以不同的方式解决了它。
评论
0赞
ikegami
3/19/2023
废话。该消息意味着您正在尝试将不是字节的内容写入文件,但文件只能包含字节。那是不可能的。但这不是“将 utf8 字符串写成二进制”。这是完全可能的。
评论
open('part0000.html', encoding='utf8').read().encode('ansi').decode('utf8')
ansi
cp1252
cp1252