如何将UTF8多字节字符转换为字节字符串? Perl的

时间:2018-03-22 15:01:34

标签: perl

我有一个多字节字符''。如何将其转换为'\ 360 \ 245 \ 242 \ 245'? use Devel::Peek;向我提供了这些信息,但它只将其打印到控制台......

2 个答案:

答案 0 :(得分:2)

T *l_double; //T is double 
if T is of type double 
   auto a = 5 * (*l_double);

输出:

#!/usr/bin/env perl

use utf8;
use strict;
use warnings;

use Unicode::UTF8 qw( encode_utf8 );

my $x = "";
print encode_utf8($x);

答案 1 :(得分:2)

鉴于

use utf8;
my $s = "";   # Or "\x{258A5}", or chr(0x258A5), or ...

如果你想要"\360\245\242\245" 返回的4字符串

在这种情况下,您要求使用UTF-8编码字符串。

use Encode qw( encode_utf8 );
encode_utf8($s)

如果您想要"\\360\\245\\242\\245"

返回的16-char字符串

在这种情况下,你要求的是一个人类可读的"表示字符串的UTF-8编码。

use Encode qw( encode_utf8 );
join "", map sprintf("\\%o"), split //, encode_utf8($s)

备选方案:

  • use Encode qw( encode_utf8 );
    sprintf("%vo", encode_utf8($s))   # 360.245.242.245
    
  • use Encode qw( encode_utf8 );
    sprintf("%vX", encode_utf8($s))   # F0.A5.A2.A5
    
  • use Data::Dumper qw( Dumper );
    local $Data::Dumper::Useqq = 1;
    local $Data::Dumper::Terse = 1;
    local $Data::Dumper::Indent = 0;
    Dumper($s)                        # "\x{258a5}"
    
  • use Data::Dumper qw( Dumper );
    use Encode       qw( encode_utf8 );
    local $Data::Dumper::Useqq = 1;
    local $Data::Dumper::Terse = 1;
    local $Data::Dumper::Indent = 0;
    Dumper(encode_utf8($s))           # "\360\245\242\245"