#!/usr/bin/perl -CS use strict; use warnings; use Encode qw(decode); $_ = ; print; while (/(\\u(d8[0-9a-f]{2})\\u(d[c-f][0-9a-f]{2}))/ ) { ## NB: Match only surrogate pairs my $rplc = $1; my $sp = pack( "nn", hex($2), hex($3) ); s/\Q$rplc/decode( "UTF-16BE", $sp )/e; print; } while (/(\\u([0-9a-f]{4}))/ ) { my $rplc = $1; my $cp = pack( "n", hex($2) ); s/\Q$rplc/decode( "UTF-16BE", $cp )/e; print; } __DATA__ Ren\u00e9 \ud83d\ude06 Fran\u00e7oise