/ / Perl: Convertissez la NCR décimale (la plus haute) en utf-8 - regex, perl, utf-8, décimal, ncr

Perl: Convertir (haut) décimal NCR en utf-8 - regex, perl, utf-8, décimal, ncr

J'ai cette chaîne (Décimal NCR): 日本の鍼灸とは

Il représente le texte japonais 日本の鍼灸とは.

Mais j'ai besoin de (utf-8): %E6%97%A5%E6%9C%AC%E3%81%AE%E9%8D%BC%E7%81%B8%E3%81%A8%E3%81%AF

Pour le premier personnage: 日%E6%97%A5

Ce site le fait, mais comment puis-je l'obtenir en Perl? (Si possible dans une regex unique comme s/&#([0-9]+);/uc("%".unpack("H2", pack("c", $1)))/eg;.)

http://www.endmemo.com/unicode/unicodeconverter.php

De plus, j'ai besoin de le reconvertir d'Utf-8 en Décimal RCN.

Je me suis cassé la tête à propos de celui-ci depuis une demi-journée maintenant, toute aide est grandement appréciée!

Réponses:

0 pour la réponse № 1
#!/usr/bin/perl
use strict;
use warnings;

use Test::More tests => 2;
use Encode qw{ encode decode };

my $in = "日本の鍼灸とは"; # 日本の鍼灸とは
my $out = "%E6%97%A5%E6%9C%AC%E3%81%AE%E9%8D%BC%E7%81%B8%E3%81%A8%E3%81%AF";

(my $utf = $in) =~ s/&#(.*?);/chr $1/ge;

my $r = join q(), map { sprintf "%%%2X", ord } split //, encode("utf8", $utf);
is($r, $out);

(my $s = $r) =~ s/%(..)/chr hex $1/ge;
$s = decode("utf8", $s);
$s = join q(), map "&#" . ord . ";", split //, $s;
is($s, $in);

3 pour la réponse № 2

Ce que vous appelez "utf-8" est en réalité un encodage d'URL.


Entités HTML (日) ⇒ texte () ⇒ Composant URI (%E6%97%A5):

use HTML::Entities qw( decode_entities );
use URI::Escape    qw( uri_escape_utf8 );

my $text = decode_entities($html);
my $uri_component = uri_escape_utf8($text);

Composant URI (%E6%97%A5) ⇒ texte () ⇒ Entités HTML (日):

use Encode         qw( decode_utf8 );
use HTML::Entities qw( encode_entities );
use URI::Escape    qw( uri_unescape );

my $text = decode_utf8(uri_unescape($uri_component));
my $html = encode_entities($text);