Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

Re^3: length() miscounting UTF8 characters?

by farang (Chaplain)
on Apr 28, 2014 at 14:28 UTC ( #1084130=note: print w/replies, xml ) Need Help??

in reply to Re^2: length() miscounting UTF8 characters?
in thread length() miscounting UTF8 characters?

the perldoc entry for length (which I checked beforehand to make sure it wouldn't count bytes -- hence my confusion)
It "normally deals in logical characters", but its logic doesn't cover all the intricacies of unicode.

Do you have any specific languages or complex data in mind with which it might fail?
Yes, Thai language is the main one I'm involved with. The modified script below shows that length counts diacriticals in Thai, which may or may not be what is wanted, and is inconsistent with the results for Latin diacriticals in your dataset, which length isn't counting separately. I'm using pre tags so that the Thai will display correctly and shortened lines to facilitate copy/paste.
#!/usr/bin/env perl
use warnings;
use v5.14;
use Unicode::Normalize qw/NFD/;
binmode STDOUT, 'utf8';
binmode DATA, 'encoding(utf-8)';
while (<DATA>) {
    print $_, ': ';
    my $alphacount = () = /\p{Alpha}/g;
    say "non-(A-Za-z) symbols <$_>", 
        " contain $alphacount", 
        " alphabetic characters and ",
        getdia($_), " diacritical chars.";
    say "length() thinks there are ", 
        length, " characters\n";

sub getdia {
    my $normalized = NFD($_[0]);
    my $diacount = () = 
        $normalized =~ /\p{Dia}/g;
    return $diacount;


  • Comment on Re^3: length() miscounting UTF8 characters?

Replies are listed 'Best First'.
Re^4: length() miscounting UTF8 characters?
by AppleFritter (Priest) on Apr 28, 2014 at 19:37 UTC

    Intricacies - that's putting it mildly! Right now it feels like the more I learn about Unicode, the less I know. ;)

    I'll make a mental note to avoid length when dealing with Unicode data, and to normalize strings before working with them.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1084130]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2017-06-23 10:58 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (543 votes). Check out past polls.