2013-03-06 3 views
0

Я пытаюсь сгенерировать символ UTF-8 из двух пар HEX. 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

Спасибо за любые советы!

ответ

3
use Encode; 

my $byte1 = "C3"; 
my $byte2 = "A9"; 
my $bytes = chr(hex($byte1)) . chr(hex($byte2)); 
print decode_utf8($bytes); 
+0

Этот ответ сработал отлично! Я ценю помощь. Ответ икегами помог мне понять, что происходит с шестнадцатеричными значениями. – iohans

1

Aahh ysth бить меня:

#!/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); 
+0

Спасибо за ответ. Это также справедливо. – iohans

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; 
+0

Спасибо за объяснение. Часть «\ xCA» заставляла меня думать, что это строка, так как 0xCA не цитируется. – iohans

Смежные вопросы