Re: Conversion-free switching between binary and character strings in Perl

[email protected] (Steve Hay) Fri, 01 Jun 2007 08:58:55 +0100
Newsgroups perl.unicode
Message-ID <[email protected]>
Markus Kuhn wrote:
> Let's say I live in a completely ISO 8859/etc.-free world, that I don't
> care about the existance of any other character representation than
> UTF-8, and that I am therefore absolutely not interested in any form of
> character encoding conversion function.
> 
> How can I then switch between a "byte string" and a "character string"
> in Perl without ever actually touching the stored bytes of the string?
> All I want to change is the UTF-8 flag associated with a string that
> tells the regular expression engine, for example, whether /./ matches
> just a single byte or an entire UTF-8 character?

Sounds like Encode::_utf8_on() and Encode::_utf8_off() are what you 
want, although they are documented as "INTERNAL" ("efficient but may 
change") and obviously involve loading the Encode package...


> 
> It seems the low-level Perl functions utf8::upgrade(),
> utf8::downgrade(), utf8::encode(), and utf8::decode() (see "man 3 utf8")
> are not usable, because they interpret and convert any binary string as
> if it was an ISO 8859-1 string. I don't want to load any huge encoding
> packages such as "use encode 'utf8';" or "use Encoding;", because I
> don't need and want any character encoding conversion functions. All I
> want to change is a simple flag. Unfortunately, the documentation is far
> from clear on how to do this, and my experimentation leads to strange
> results that look like strings going through several ISO 8859-1 to UTF-8
> conversion steps (whereas I want zero of these).
> 
> Any help?
> 
> Markus

--