Priti24 has asked for the wisdom of the Perl Monks concerning the following question:

i have a variable named  $string which can contain English alphabets , digits , or latin alphabats . i have to change latin alphabets to \u0 + hexadecimal code to particular latin alphabet. like

"Ǖ" ==> "\u01D5" " Ǘ" ==> "\u01D7" Ȕ ==> "\u0214"

i have written code for this

use strict; use warnings; use Encode; my $internal_string_2 = 'aÜaerzz'; my $octets = decode ("utf8", $internal_string_2); for (split //, $octets) { if($_ =~ m/[a_zA_Z0_9]/) { print "$_\n\n"; } else { printf ("\u%X ", ord($_)); print "\n\n"; } }

this script is only converting latin alphabets to hexadecimal number , not adding '\u0' before hexadecimal code. This $string variable is having dynamic value , may be it can contain other latin alphabets. Please give any better idea to this . Thanks in advance

Replies are listed 'Best First'.
Re: how to convert latin alphabets to hexadecimal number
by kcott (Archbishop) on May 01, 2013 at 14:52 UTC

    G'day Priti24,

    This appears to do what you want:

    $ perl -Mstrict -Mwarnings -E ' use utf8; my $internal_string_2 = q{aÜaerzz}; say for map { /[a-z0-9]/i ? $_ : sprintf "\\U%04X" => unpack "W*", $_ } chr(469), chr(471), chr(532), split // => $internal_string_2; ' \U01D5 \U01D7 \U0214 a \U00DC a e r z z

    For more information, take a look at perluniintro and specifically the example in Displaying Unicode As Text.

    -- Ken

Re: how to convert latin alphabets to hexadecimal number
by kennethk (Abbot) on May 01, 2013 at 14:16 UTC
    In your format string, you use double quotes with an unescaped backslash. Change line 13 to printf ('\u%X ', ord($_)); to get your desired output.

    A little cleaner might be to swap lines 13 and 14 to printf "\\u%X\n\n", ord;

    Better still, of course, is to use a package to do interpolation, as the other comments suggest, or actually encode your inputs and outputs properly (perlunitut).


    #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Re: how to convert latin alphabets to hexadecimal number
by Anonymous Monk on May 01, 2013 at 13:27 UTC
Re: how to convert latin alphabets to hexadecimal number
by Anonymous Monk on May 01, 2013 at 13:17 UTC

    Please give any better idea to this .

    Use JSON with ascii option