0

2 つの HEX ペアから UTF-8 文字を生成しようとしています。HEX ペアは文字列からのものです。

このコードは機能します:

use Encode;

my $bytes = "\xC3\xA9";
print decode_utf8($bytes);

# Prints: é and is correct

このコードは機能しません:

use Encode;

my $byte1 = "C3";
my $byte2 = "A9";
my $bytes = "\x$byte1\x$byte2";
print decode_utf8($bytes);

これが私が生成しようとしている文字です: http://www.fileformat.info/info/unicode/char/00e9/index.htm

ヒントをありがとう!

4

3 に答える 3

3

文字列リテラルはミニ言語と考えてください。あなたはできません

"\x$hex"

あなたにできる以上のこと

my $for = 'for';
$for (1..4) { }

しかし、やりたいことを実現する方法はたくさんあります。

my $bytes = join '', map chr hex, @bytes_hex;
my $bytes = pack 'C*', map hex, @bytes_hex;
my $bytes = pack '(H*)*', @bytes_hex;
于 2013-03-06T02:23:40.447 に答える
3
use Encode;

my $byte1 = "C3";
my $byte2 = "A9";
my $bytes = chr(hex($byte1)) . chr(hex($byte2));
print decode_utf8($bytes);
于 2013-03-06T02:01:10.543 に答える
1

ああ、私を打ち負かした:

#!/usr/bin/env perl

use strict;
use warnings;

use Encode;
use utf8::all;

my $byte1 = "C3";
my $byte2 = "A9";
my $bytes = join '', map {chr hex} $byte1, $byte2;

print decode_utf8($bytes);
于 2013-03-06T02:08:37.763 に答える