【问题标题】:Does Encode::encode modify/delete the original string? [duplicate]Encode::encode 是否修改/删除原始字符串? [复制]
【发布时间】:2015-09-30 21:16:17
【问题描述】:

Encode::encode 的文档说:

编码

$octets = encode(ENCODING, STRING[, CHECK]) 编码标量值 STRING 从 Perl 的内部形式转化为 ENCODING 并返回一个序列 字节数。

这是一个测试脚本:

use feature qw(say);
use strict;
use warnings;
use utf8;
use open qw( :std :utf8 );

use Encode qw(encode);

my $str = 'æ';
say "str = '$str'";
my $str2 = encode('UTF-8', $str, Encode::FB_CROAK);
say "str = '$str'";

输出是:

str = 'æ'
str = ''

为什么在调用encode$str 会被删除?这是意料之中的吗?

【问题讨论】:

  • 这似乎是一个错误。使用encode('UTF-8', "$str", Encode:::FB_CROAK) 作为解决方法。
  • 当然 UTF8 编码很流行,如此流行以至于他们专门为它命名了一个子程序。您可以在没有支票的情况下拨打电话:encode_utf8($str)
  • 我认为这回答了问题stackoverflow.com/a/29843396/198183
  • @sid_com 谢谢,这就是答案。所以你可以将此问题标记为重复..
  • @HåkonHægland 不是完全相同的副本。尽管它们在概念上很接近并且它们的问题是相同的,但另一个问题专门要求一个真实的检查值。这个问题更能说明问题。

标签: perl encoding utf-8


【解决方案1】:

"如果未设置 Encode::LEAVE_SRC 位但设置了 CHECK,则编码()或解码()的源字符串将被覆盖。如果您对此不感兴趣,则按位或它带有位掩码。”

引用Encode 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    相关资源
    最近更新 更多