标签: binmode

我应该在每个binmode后弹出吗?

使用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)

io perl layer binmode

6
推荐指数
1
解决办法
632
查看次数

从 base64 数据创建图像文件

我有一个 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)

在这种情况下,我也遇到了同样的错误。

我究竟做错了什么?

ruby base64 jpeg binmode

5
推荐指数
1
解决办法
5164
查看次数

"关闭"binmode(STDOUT,":utf8")本地

我的脚本开头有以下块:

#!/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 local utf-8 binmode

4
推荐指数
1
解决办法
841
查看次数

在Julia中写一个最接近Perl 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

binaryfiles binmode julia

3
推荐指数
1
解决办法
700
查看次数

Perl:在读取文件的过程中更改编码的问题

我使用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(不)刷新缓冲区的问题.或者我做错了什么?

谢谢您的回答.

perl encoding binmode

1
推荐指数
1
解决办法
132
查看次数

标签 统计

binmode ×5

perl ×3

base64 ×1

binaryfiles ×1

encoding ×1

io ×1

jpeg ×1

julia ×1

layer ×1

local ×1

ruby ×1

utf-8 ×1