如何将 EBCDIC 字符表打印到标准输出

如何将 EBCDIC 字符表打印到标准输出

因此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 

相关内容