Re: Matching upper ASCII characters in RE patterns

[email protected] (karl williamson) Tue, 30 Nov 2010 12:10:16 -0700
Newsgroups perl.unicode
Message-ID <[email protected]>
karl williamson wrote:
> Jonathan Pool wrote:
>> Let's say the character NO-BREAK SPACE (U+00A0) appears in a 
>> UTF8-encoded text file (so it appears there as C2A0), and I want to 
>> match strings that contain this character.
>>
>> I write a script (itself encoded with UTF8) in Perl 5.10.0 (on OS X 
>> 10.6.5) with:
>>
>> use encoding 'utf8';
>> use charnames ':full:';
>>
>> The script opens the file with:
>>
>> open FH, '<:utf8', filename.txt;
> 
> You should always use '<:encoding(utf8)' instead to get utf8 validation.
> But that's not the problem here.
> I tested it on the very latest development code, and it still fails. The 
> problem is a bug or bugs in Perl with parsing files encoded in utf8.  I 
> converted the .pl to latin1 and removed the "use encoding 'utf8'", and 
> it works.
> 
> I believe it is known that there are issues with 'use encoding', but I 
> suggest filing a bug report, by sending email to [email protected]. 
> Attached are two files I created to test.  These should be attached to 
> the bug report so as to not have to be done again.

I thought about it some more, and replaced the "use encoding 'utf8'" 
with just "use utf8", and it also works there

>>
>> It reads lines in with:
>>
>> while <FH> {}
>>
>> Then, in a regular expression in the script, I can match the NO-BREAK 
>> SPACE with any of these patterns:
>>
>> 1. /\N{NO-BREAK SPACE}/
>>
>> 2. / / (where the character between slashes looks like a space but is 
>> a no-break space)
>>
>> 3. /[\x7f-\x80]/
>>
>> Patterns 1 and 2 make sense, but pattern 3 is mysterious to me, 
>> because the range specified in pattern 3 includes DELETE and an 
>> unnamed character but does not include NO-BREAK SPACE.
>>
>> Moreover, I expect to be able to match the NO-BREAK SPACE with these 
>> patterns, but I cannot:
>>
>> 4. /[\xa0]/
>>
>> 5. /\xa0/
>>
>> In the related documentation, I have not found anything explaining why 
>> pattern 3 works, or anything explaining why patterns 4 and 5 do not work.
>>
>> I have replicated these anomalies in Perl 5.8.8. under Red Hat 
>> Enterprise Linux 5.
>>
>> I would be delighted to receive explanations or references to 
>> documentation that I have overlooked or misunderstood.
>> ˉ
>>
>>
> 
> 
>