【问题标题】:In which cases does encode/decode utf8 croak?在哪些情况下编码/解码 utf8 会发牢骚?
【发布时间】:2012-10-05 16:02:43
【问题描述】:

这个脚本给了我两倍相同的输出。两个say 之间的utf8 encodedecode 是否存在无法生存的编码?

#!/usr/bin/env perl
use warnings;
use 5.16.1;
use Encode qw/encode decode/;

my $my_encoding = 'ISO-8859-7';
binmode STDOUT, ":encoding($my_encoding)";

my $var = "\N{GREEK SMALL LETTER TAU}";
$var .= "\N{GREEK SMALL LETTER OMEGA WITH TONOS}";
$var .= "\N{GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA}";

$var = encode( 'utf8', $var );
$var = decode( $my_encoding, $var );

say $var;

my $test = encode( 'utf8', $var, Encode::FB_CROAK );
$var = decode( 'utf8', $test, Encode::FB_CROAK  );

say $var;

【问题讨论】:

    标签: perl encoding decoding


    【解决方案1】:

    如果您尝试对不属于目标编码字符集的内容进行编码,它会发出嘶哑的声音。

    utf8 是 Perl 用于存储 72 位字符的 Perl 特定编码。它与 UTF-8 类似,但又有所不同。它支持 Perl 支持的每一个字符,所以它永远不会呱呱叫。

    另一方面,如果您要使用 UTF-8,如果您尝试对非 Unicode 字符(例如 chr(0x200000))进行编码,它会发出嘶哑的声音。

    另请参阅::encoding(UTF-8) vs :encoding(utf8) vs :utf8

    【讨论】:

    • 如果我写utf-8,关于不同编码的答案会是什么?
    • 我不明白这个问题。
    • encode-decode 如果编码有效,则使用相同编码应该始终有效。您可能不会完全了解您开始时的内容,但我不知道您何时不会。
    • 我希望我已经理解:我从字符(解码)开始,可以通过不同编码编码的字符是Unicode字符的子集。所以只有二进制数据才能解决这个问题。
    • 在utf8的情况下,字符集是Unicode的一个正确的superset
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2016-06-21
    • 2021-02-07
    相关资源
    最近更新 更多