使用binmode时,我应该从可能以前使用过的binmode中弹出图层吗?
#!/usr/bin/env perl
use warnings;
use 5.012;
use autodie;
open my $tty, '>:encoding(utf8)', '/dev/tty'; # ...
close $tty;
open $tty, '>:encoding(latin1)', '/dev/tty'; # ...
close $tty;
open $tty, '>:encoding(utf8)', '/dev/tty'; # ...
close $tty;
open $tty, '>:encoding(latin1)', '/dev/tty'; # ...
close $tty;
open $tty, '>:bytes', '/dev/tty';
say "@{[ PerlIO::get_layers( $tty ) ]}"; # unix perlio
close $tty;
say "----------------------------------------";
binmode STDOUT, ':encoding(utf8)'; # ...
binmode STDOUT, ':encoding(latin1)'; # ...
binmode STDOUT, ':encoding(utf8)'; # ...
binmode STDOUT, ':encoding(latin1)'; # ...
binmode …Run Code Online (Sandbox Code Playgroud) 我有一个 base64 编码的图像数据。我正在粘贴前几个字符
string='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD /2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopG R8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgo......'
Run Code Online (Sandbox Code Playgroud)
我正在用 ruby 跟踪它
decoded_string=Base64.decode64 string
output_file = Tempfile.new(['image','.jpeg'])
output_file.binmode
output_file.write image
Run Code Online (Sandbox Code Playgroud)
在此之后,当我打开“image.jpeg”时,出现错误
Error interpreting JPEG image file (Not a JPEG file: starts with 0x75 0xab)
Run Code Online (Sandbox Code Playgroud)
我也试过
File.open('a.jpeg', 'wb') do|f|
f.write decoded_string
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我也遇到了同样的错误。
我究竟做错了什么?
我的脚本开头有以下块:
#!/usr/bin/perl5 -w
use strict;
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
Run Code Online (Sandbox Code Playgroud)
在某些子程序中,当存在其他编码时(来自远程子程序),当接收西里尔字符或其他字符时,数据将无法正确显示.它是"binmode",导致问题.
我可以在本地"关闭"binmode utf8,仅用于子程序吗?
我无法删除全局binmode设置,我无法更改远程编码.
我正在尝试从现有的Perl代码反向设计一个Julia脚本,到目前为止一直很好,但我已经到了一个点,我现在必须在Julia中写一堆二进制文件,这是我不熟悉的.我想知道是否有人有任何经验,而且,语法是什么.我已经在互联网上搜索过,但实例一直很简陋(简而言之,我并不是说肌肉发达,而是为军事冲突做好准备,而不是荒芜).如果有人在这个话题上有一些像智慧这样的圣人让我知道.如果我从包含数值的dict写入文件,我会使用类似的东西:
for i in sick
f = open("/Users/MacBookPro15/$i/Headaches.dat", "w")
for x in RICT["$i"]["Headaches"]
write(f, "$x\n")
end
close(f)
end
Run Code Online (Sandbox Code Playgroud)
我怎么能改变它来写二进制文件?非常感谢.
追逐CB
我使用Perl加载一些'宏'文件.但是,这些宏可以用各种编码进行编码,因此为用户编写宏指定了一个指令(即
#encoding iso-8859-2
Run Code Online (Sandbox Code Playgroud)
在宏的开头).
每次在宏中遇到此指令时,都会调用函数设置编码,看起来像这样:
sub change_encoding {
my ($file_handle, $encoding) = @_;
$file_handle->flush();
binmode($file_handle); # get rid of IO layers
binmode($file_handle,":encoding($encoding)");
}
Run Code Online (Sandbox Code Playgroud)
问题是当我使用标准读取宏时
while($line = <$file_handle>){
process_macro($line);
}
Run Code Online (Sandbox Code Playgroud)
我收到消息说"utf8"\ xXY"没有映射到Unicode",但仅当带有变音符号的字符在#encoding指令附近时.我尝试了几个例子,我能够将一半的字符串与\ xXY代码和其他一半的字符串与正确解码的字符,如下所示:
sub macro5_fn {
print "\xBElu\xBBou\xE8k\xFD k\xF9\xF2 úp?l ?ábelské ódy\n";
}
Run Code Online (Sandbox Code Playgroud)
如果我在函数之前添加了更多注释,则所有字符都可以:
sub macro5_fn {
print "žlu?ou?ký k?? úp?l ?ábelské ódy\n";
}
Run Code Online (Sandbox Code Playgroud)
简单地说,正确解码的字符数取决于这些字符与#encoding指令的距离,那些接近的字符不能正确解码.
在我看来,这是Perl和PerlIO(不)刷新缓冲区的问题.或者我做错了什么?
谢谢您的回答.