因此ascii
将打印一个 ascii 字符表到 stdout。有没有办法打印同样的东西,但对于 EBCDIC 字符编码?
答案1
没有像 ASCII 那样的统一基本 EBCDIC 表。
这可能是你的主要问题。 ASCII实际上是7位。添加 8 位引入了不兼容的区域表的怪异世界。对于 EBCDIC 来说,没有这样的安全区。它们只是“随机”不兼容。
选择1: https://www.ibm.com/docs/en/epfz/5.3?topic=documents-supported-ebcdic-code-pages
答案2
某些代码页cp37
可以转换为ASCII
.下面的脚本打印出代码点和相应 Unicode 字符的表。
#!/usr/bin/env perl
use feature qw(unicode_strings);
use utf8;
use open qw(:std :encoding(UTF-8));
use strict;
use warnings;
use charnames qw(:short latin);
use Encode qw(from_to);
sub ebcdic_to_ascii {
my $ebcdic_ord = shift;
my $binary = pack( 'C', $ebcdic_ord );
from_to( $binary, 'cp37', 'latin1' );
my $latin_ord = unpack( 'C', $binary );
return $latin_ord;
}
sub describe_chr {
my $x = ebcdic_to_ascii(shift);
my $s = sprintf( "%c", utf8::unicode_to_native($x) );
return $s =~ /[[:graph:]]/ ? $s : charnames::viacode($x);
}
for ( 0x0 .. 0xFF ) {
printf "%02X %s\n", $_, describe_chr($_);
}
$ ./ebcdic | column