Fix long standing memory leak with pop and shift!
[p5sagit/p5-mst-13.2.git] / ext / Encode / Encode.pm
1 #
2 # $Id: Encode.pm,v 1.83 2002/11/18 17:28:29 dankogai Exp $
3 #
4 package Encode;
5 use strict;
6 our $VERSION = do { my @r = (q$Revision: 1.83 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
7 our $DEBUG = 0;
8 use XSLoader ();
9 XSLoader::load(__PACKAGE__, $VERSION);
10
11 require Exporter;
12 use base qw/Exporter/;
13
14 # Public, encouraged API is exported by default
15
16 our @EXPORT = qw(
17   decode  decode_utf8  encode  encode_utf8
18   encodings  find_encoding
19 );
20
21 our @FB_FLAGS  = qw(DIE_ON_ERR WARN_ON_ERR RETURN_ON_ERR LEAVE_SRC
22                     PERLQQ HTMLCREF XMLCREF);
23 our @FB_CONSTS = qw(FB_DEFAULT FB_CROAK FB_QUIET FB_WARN
24                     FB_PERLQQ FB_HTMLCREF FB_XMLCREF);
25
26 our @EXPORT_OK =
27     (
28      qw(
29        _utf8_off _utf8_on define_encoding from_to is_16bit is_8bit
30        is_utf8 perlio_ok resolve_alias utf8_downgrade utf8_upgrade
31       ),
32      @FB_FLAGS, @FB_CONSTS,
33     );
34
35 our %EXPORT_TAGS =
36     (
37      all          =>  [ @EXPORT, @EXPORT_OK ],
38      fallbacks    =>  [ @FB_CONSTS ],
39      fallback_all =>  [ @FB_CONSTS, @FB_FLAGS ],
40     );
41
42 # Documentation moved after __END__ for speed - NI-S
43
44 our $ON_EBCDIC = (ord("A") == 193);
45
46 use Encode::Alias;
47
48 # Make a %Encoding package variable to allow a certain amount of cheating
49 our %Encoding;
50 our %ExtModule;
51 require Encode::Config;
52 eval { require Encode::ConfigLocal };
53
54 sub encodings
55 {
56     my $class = shift;
57     my %enc;
58     if (@_ and $_[0] eq ":all"){
59         %enc = ( %Encoding, %ExtModule );
60     }else{
61         %enc = %Encoding;
62         for my $mod (map {m/::/o ? $_ : "Encode::$_" } @_){
63             $DEBUG and warn $mod;
64             for my $enc (keys %ExtModule){
65                 $ExtModule{$enc} eq $mod and $enc{$enc} = $mod;
66             }
67         }
68     }
69     return
70         sort { lc $a cmp lc $b }
71              grep {!/^(?:Internal|Unicode|Guess)$/o} keys %enc;
72 }
73
74 sub perlio_ok{
75     my $obj = ref($_[0]) ? $_[0] : find_encoding($_[0]);
76     $obj->can("perlio_ok") and return $obj->perlio_ok();
77     return 0; # safety net
78 }
79
80 sub define_encoding
81 {
82     my $obj  = shift;
83     my $name = shift;
84     $Encoding{$name} = $obj;
85     my $lc = lc($name);
86     define_alias($lc => $obj) unless $lc eq $name;
87     while (@_){
88         my $alias = shift;
89         define_alias($alias, $obj);
90     }
91     return $obj;
92 }
93
94 sub getEncoding
95 {
96     my ($class, $name, $skip_external) = @_;
97
98     ref($name) && $name->can('new_sequence') and return $name;
99     exists $Encoding{$name} and return $Encoding{$name};
100     my $lc = lc $name;
101     exists $Encoding{$lc} and return $Encoding{$lc};
102
103     my $oc = $class->find_alias($name);
104     defined($oc) and return $oc;
105     $lc ne $name and $oc = $class->find_alias($lc);
106     defined($oc) and return $oc;
107
108     unless ($skip_external)
109     {
110         if (my $mod = $ExtModule{$name} || $ExtModule{$lc}){
111             $mod =~ s,::,/,g ; $mod .= '.pm';
112             eval{ require $mod; };
113             exists $Encoding{$name} and return $Encoding{$name};
114         }
115     }
116     return;
117 }
118
119 sub find_encoding
120 {
121     my ($name, $skip_external) = @_;
122     return __PACKAGE__->getEncoding($name,$skip_external);
123 }
124
125 sub resolve_alias {
126     my $obj = find_encoding(shift);
127     defined $obj and return $obj->name;
128     return;
129 }
130
131 sub encode($$;$)
132 {
133     my ($name, $string, $check) = @_;
134     $check ||=0;
135     my $enc = find_encoding($name);
136     unless(defined $enc){
137         require Carp;
138         Carp::croak("Unknown encoding '$name'");
139     }
140     my $octets = $enc->encode($string,$check);
141     return undef if ($check && length($string));
142     return $octets;
143 }
144
145 sub decode($$;$)
146 {
147     my ($name,$octets,$check) = @_;
148     $check ||=0;
149     my $enc = find_encoding($name);
150     unless(defined $enc){
151         require Carp;
152         Carp::croak("Unknown encoding '$name'");
153     }
154     my $string = $enc->decode($octets,$check);
155     $_[1] = $octets if $check;
156     return $string;
157 }
158
159 sub from_to($$$;$)
160 {
161     my ($string,$from,$to,$check) = @_;
162     $check ||=0;
163     my $f = find_encoding($from);
164     unless (defined $f){
165         require Carp;
166         Carp::croak("Unknown encoding '$from'");
167     }
168     my $t = find_encoding($to);
169     unless (defined $t){
170         require Carp;
171         Carp::croak("Unknown encoding '$to'");
172     }
173     my $uni = $f->decode($string,$check);
174     return undef if ($check && length($string));
175     $string =  $t->encode($uni,$check);
176     return undef if ($check && length($uni));
177     return defined($_[0] = $string) ? length($string) : undef ;
178 }
179
180 sub encode_utf8($)
181 {
182     my ($str) = @_;
183     utf8::encode($str);
184     return $str;
185 }
186
187 sub decode_utf8($)
188 {
189     my ($str) = @_;
190     return undef unless utf8::decode($str);
191     return $str;
192 }
193
194 predefine_encodings(1);
195
196 #
197 # This is to restore %Encoding if really needed;
198 #
199
200 sub predefine_encodings{
201     use Encode::Encoding;
202     no warnings 'redefine';
203     my $use_xs = shift;
204     if ($ON_EBCDIC) {
205         # was in Encode::UTF_EBCDIC
206         package Encode::UTF_EBCDIC;
207         push @Encode::UTF_EBCDIC::ISA, 'Encode::Encoding';
208         *decode = sub{
209             my ($obj,$str,$chk) = @_;
210             my $res = '';
211             for (my $i = 0; $i < length($str); $i++) {
212                 $res .=
213                     chr(utf8::unicode_to_native(ord(substr($str,$i,1))));
214             }
215             $_[1] = '' if $chk;
216             return $res;
217         };
218         *encode = sub{
219             my ($obj,$str,$chk) = @_;
220             my $res = '';
221             for (my $i = 0; $i < length($str); $i++) {
222                 $res .=
223                     chr(utf8::native_to_unicode(ord(substr($str,$i,1))));
224             }
225             $_[1] = '' if $chk;
226             return $res;
227         };
228         $Encode::Encoding{Unicode} =
229             bless {Name => "UTF_EBCDIC"} => "Encode::UTF_EBCDIC";
230     } else {
231         package Encode::Internal;
232         push @Encode::Internal::ISA, 'Encode::Encoding';
233         *decode = sub{
234             my ($obj,$str,$chk) = @_;
235             utf8::upgrade($str);
236             $_[1] = '' if $chk;
237             return $str;
238         };
239         *encode = \&decode;
240         $Encode::Encoding{Unicode} =
241             bless {Name => "Internal"} => "Encode::Internal";
242     }
243
244     {
245         # was in Encode::utf8
246         package Encode::utf8;
247         push @Encode::utf8::ISA, 'Encode::Encoding';
248         # 
249         if ($use_xs){
250             $DEBUG and warn __PACKAGE__, " XS on";
251             *decode = \&decode_xs;
252             *encode = \&encode_xs;
253         }else{
254             $DEBUG and warn __PACKAGE__, " XS off";
255             *decode = sub{
256                 my ($obj,$octets,$chk) = @_;
257                 my $str = Encode::decode_utf8($octets);
258                 if (defined $str) {
259                     $_[1] = '' if $chk;
260                     return $str;
261                 }
262                 return undef;
263             };
264             *encode = sub {
265                 my ($obj,$string,$chk) = @_;
266                 my $octets = Encode::encode_utf8($string);
267                 $_[1] = '' if $chk;
268                 return $octets;
269             };
270         }
271         $Encode::Encoding{utf8} =
272             bless {Name => "utf8"} => "Encode::utf8";
273     }
274 }
275
276 1;
277
278 __END__
279
280 =head1 NAME
281
282 Encode - character encodings
283
284 =head1 SYNOPSIS
285
286     use Encode;
287
288 =head2 Table of Contents
289
290 Encode consists of a collection of modules whose details are too big
291 to fit in one document.  This POD itself explains the top-level APIs
292 and general topics at a glance.  For other topics and more details,
293 see the PODs below:
294
295   Name                          Description
296   --------------------------------------------------------
297   Encode::Alias         Alias definitions to encodings
298   Encode::Encoding      Encode Implementation Base Class
299   Encode::Supported     List of Supported Encodings
300   Encode::CN            Simplified Chinese Encodings
301   Encode::JP            Japanese Encodings
302   Encode::KR            Korean Encodings
303   Encode::TW            Traditional Chinese Encodings
304   --------------------------------------------------------
305
306 =head1 DESCRIPTION
307
308 The C<Encode> module provides the interfaces between Perl's strings
309 and the rest of the system.  Perl strings are sequences of
310 B<characters>.
311
312 The repertoire of characters that Perl can represent is at least that
313 defined by the Unicode Consortium. On most platforms the ordinal
314 values of the characters (as returned by C<ord(ch)>) is the "Unicode
315 codepoint" for the character (the exceptions are those platforms where
316 the legacy encoding is some variant of EBCDIC rather than a super-set
317 of ASCII - see L<perlebcdic>).
318
319 Traditionally, computer data has been moved around in 8-bit chunks
320 often called "bytes". These chunks are also known as "octets" in
321 networking standards. Perl is widely used to manipulate data of many
322 types - not only strings of characters representing human or computer
323 languages but also "binary" data being the machine's representation of
324 numbers, pixels in an image - or just about anything.
325
326 When Perl is processing "binary data", the programmer wants Perl to
327 process "sequences of bytes". This is not a problem for Perl - as a
328 byte has 256 possible values, it easily fits in Perl's much larger
329 "logical character".
330
331 =head2 TERMINOLOGY
332
333 =over 2
334
335 =item *
336
337 I<character>: a character in the range 0..(2**32-1) (or more).
338 (What Perl's strings are made of.)
339
340 =item *
341
342 I<byte>: a character in the range 0..255
343 (A special case of a Perl character.)
344
345 =item *
346
347 I<octet>: 8 bits of data, with ordinal values 0..255
348 (Term for bytes passed to or from a non-Perl context, e.g. a disk file.)
349
350 =back
351
352 =head1 PERL ENCODING API
353
354 =over 2
355
356 =item $octets  = encode(ENCODING, $string [, CHECK])
357
358 Encodes a string from Perl's internal form into I<ENCODING> and returns
359 a sequence of octets.  ENCODING can be either a canonical name or
360 an alias.  For encoding names and aliases, see L</"Defining Aliases">.
361 For CHECK, see L</"Handling Malformed Data">.
362
363 For example, to convert a string from Perl's internal format to
364 iso-8859-1 (also known as Latin1),
365
366   $octets = encode("iso-8859-1", $string);
367
368 B<CAVEAT>: When you run C<$octets = encode("utf8", $string)>, then $octets
369 B<may not be equal to> $string.  Though they both contain the same data, the utf8 flag
370 for $octets is B<always> off.  When you encode anything, utf8 flag of
371 the result is always off, even when it contains completely valid utf8
372 string. See L</"The UTF-8 flag"> below.
373
374 encode($valid_encoding, undef) is harmless but warns you for 
375 C<Use of uninitialized value in subroutine entry>. 
376 encode($valid_encoding, '') is harmless and warnless.
377
378 =item $string = decode(ENCODING, $octets [, CHECK])
379
380 Decodes a sequence of octets assumed to be in I<ENCODING> into Perl's
381 internal form and returns the resulting string.  As in encode(),
382 ENCODING can be either a canonical name or an alias. For encoding names
383 and aliases, see L</"Defining Aliases">.  For CHECK, see
384 L</"Handling Malformed Data">.
385
386 For example, to convert ISO-8859-1 data to a string in Perl's internal format:
387
388   $string = decode("iso-8859-1", $octets);
389
390 B<CAVEAT>: When you run C<$string = decode("utf8", $octets)>, then $string
391 B<may not be equal to> $octets.  Though they both contain the same data,
392 the utf8 flag for $string is on unless $octets entirely consists of
393 ASCII data (or EBCDIC on EBCDIC machines).  See L</"The UTF-8 flag">
394 below.
395
396 decode($valid_encoding, undef) is harmless but warns you for 
397 C<Use of uninitialized value in subroutine entry>. 
398 decode($valid_encoding, '') is harmless and warnless.
399
400 =item [$length =] from_to($octets, FROM_ENC, TO_ENC [, CHECK])
401
402 Converts B<in-place> data between two encodings. The data in $octets
403 must be encoded as octets and not as characters in Perl's internal
404 format. For example, to convert ISO-8859-1 data to Microsoft's CP1250 encoding:
405
406   from_to($octets, "iso-8859-1", "cp1250");
407
408 and to convert it back:
409
410   from_to($octets, "cp1250", "iso-8859-1");
411
412 Note that because the conversion happens in place, the data to be
413 converted cannot be a string constant; it must be a scalar variable.
414
415 from_to() returns the length of the converted string in octets on success, undef
416 otherwise.
417
418 B<CAVEAT>: The following operations look the same but are not quite so;
419
420   from_to($data, "iso-8859-1", "utf8"); #1
421   $data = decode("iso-8859-1", $data);  #2
422
423 Both #1 and #2 make $data consist of a completely valid UTF-8 string
424 but only #2 turns utf8 flag on.  #1 is equivalent to
425
426   $data = encode("utf8", decode("iso-8859-1", $data));
427
428 See L</"The UTF-8 flag"> below.
429
430 =item $octets = encode_utf8($string);
431
432 Equivalent to C<$octets = encode("utf8", $string);> The characters
433 that comprise $string are encoded in Perl's internal format and the
434 result is returned as a sequence of octets. All possible
435 characters have a UTF-8 representation so this function cannot fail.
436
437
438 =item $string = decode_utf8($octets [, CHECK]);
439
440 equivalent to C<$string = decode("utf8", $octets [, CHECK])>.
441 The sequence of octets represented by
442 $octets is decoded from UTF-8 into a sequence of logical
443 characters. Not all sequences of octets form valid UTF-8 encodings, so
444 it is possible for this call to fail.  For CHECK, see
445 L</"Handling Malformed Data">.
446
447 =back
448
449 =head2 Listing available encodings
450
451   use Encode;
452   @list = Encode->encodings();
453
454 Returns a list of the canonical names of the available encodings that
455 are loaded.  To get a list of all available encodings including the
456 ones that are not loaded yet, say
457
458   @all_encodings = Encode->encodings(":all");
459
460 Or you can give the name of a specific module.
461
462   @with_jp = Encode->encodings("Encode::JP");
463
464 When "::" is not in the name, "Encode::" is assumed.
465
466   @ebcdic = Encode->encodings("EBCDIC");
467
468 To find out in detail which encodings are supported by this package,
469 see L<Encode::Supported>.
470
471 =head2 Defining Aliases
472
473 To add a new alias to a given encoding, use:
474
475   use Encode;
476   use Encode::Alias;
477   define_alias(newName => ENCODING);
478
479 After that, newName can be used as an alias for ENCODING.
480 ENCODING may be either the name of an encoding or an
481 I<encoding object>
482
483 But before you do so, make sure the alias is nonexistent with
484 C<resolve_alias()>, which returns the canonical name thereof.
485 i.e.
486
487   Encode::resolve_alias("latin1") eq "iso-8859-1" # true
488   Encode::resolve_alias("iso-8859-12")   # false; nonexistent
489   Encode::resolve_alias($name) eq $name  # true if $name is canonical
490
491 resolve_alias() does not need C<use Encode::Alias>; it can be
492 exported via C<use Encode qw(resolve_alias)>.
493
494 See L<Encode::Alias> for details.
495
496 =head1 Encoding via PerlIO
497
498 If your perl supports I<PerlIO> (which is the default), you can use a PerlIO layer to decode
499 and encode directly via a filehandle.  The following two examples
500 are totally identical in their functionality.
501
502   # via PerlIO
503   open my $in,  "<:encoding(shiftjis)", $infile  or die;
504   open my $out, ">:encoding(euc-jp)",   $outfile or die;
505   while(<$in>){ print $out $_; }
506
507   # via from_to
508   open my $in,  "<", $infile  or die;
509   open my $out, ">", $outfile or die;
510   while(<$in>){
511     from_to($_, "shiftjis", "euc-jp", 1);
512     print $out $_;
513   }
514
515 Unfortunately, it may be that encodings are PerlIO-savvy.  You can check
516 if your encoding is supported by PerlIO by calling the C<perlio_ok>
517 method.
518
519   Encode::perlio_ok("hz");             # False
520   find_encoding("euc-cn")->perlio_ok;  # True where PerlIO is available
521
522   use Encode qw(perlio_ok);            # exported upon request
523   perlio_ok("euc-jp")
524
525 Fortunately, all encodings that come with Encode core are PerlIO-savvy
526 except for hz and ISO-2022-kr.  For gory details, see L<Encode::Encoding> and L<Encode::PerlIO>.
527
528 =head1 Handling Malformed Data
529
530 =over 2
531
532 The I<CHECK> argument is used as follows.  When you omit it,
533 the behaviour is the same as if you had passed a value of 0 for
534 I<CHECK>.
535
536 =item I<CHECK> = Encode::FB_DEFAULT ( == 0)
537
538 If I<CHECK> is 0, (en|de)code will put a I<substitution character>
539 in place of a malformed character.  For UCM-based encodings,
540 E<lt>subcharE<gt> will be used.  For Unicode, the code point C<0xFFFD> is used.
541 If the data is supposed to be UTF-8, an optional lexical warning
542 (category utf8) is given.
543
544 =item I<CHECK> = Encode::FB_CROAK ( == 1)
545
546 If I<CHECK> is 1, methods will die on error immediately with an error
547 message.  Therefore, when I<CHECK> is set to 1,  you should trap the
548 fatal error with eval{} unless you really want to let it die on error.
549
550 =item I<CHECK> = Encode::FB_QUIET
551
552 If I<CHECK> is set to Encode::FB_QUIET, (en|de)code will immediately
553 return the portion of the data that has been processed so far when
554 an error occurs. The data argument will be overwritten with
555 everything after that point (that is, the unprocessed part of data).
556 This is handy when you have to call decode repeatedly in the case
557 where your source data may contain partial multi-byte character
558 sequences, for example because you are reading with a fixed-width
559 buffer. Here is some sample code that does exactly this:
560
561   my $data = ''; my $utf8 = '';
562   while(defined(read $fh, $buffer, 256)){
563     # buffer may end in a partial character so we append
564     $data .= $buffer;
565     $utf8 .= decode($encoding, $data, Encode::FB_QUIET);
566     # $data now contains the unprocessed partial character
567   }
568
569 =item I<CHECK> = Encode::FB_WARN
570
571 This is the same as above, except that it warns on error.  Handy when
572 you are debugging the mode above.
573
574 =item perlqq mode (I<CHECK> = Encode::FB_PERLQQ)
575
576 =item HTML charref mode (I<CHECK> = Encode::FB_HTMLCREF)
577
578 =item XML charref mode (I<CHECK> = Encode::FB_XMLCREF)
579
580 For encodings that are implemented by Encode::XS, CHECK ==
581 Encode::FB_PERLQQ turns (en|de)code into C<perlqq> fallback mode.
582
583 When you decode, C<\xI<HH>> will be inserted for a malformed character,
584 where I<HH> is the hex representation of the octet  that could not be
585 decoded to utf8.  And when you encode, C<\x{I<HHHH>}> will be inserted,
586 where I<HHHH> is the Unicode ID of the character that cannot be found
587 in the character repertoire of the encoding.
588
589 HTML/XML character reference modes are about the same, in place of
590 C<\x{I<HHHH>}>, HTML uses C<&#I<NNNN>>; where I<NNNN> is a decimal digit and
591 XML uses C<&#xI<HHHH>>; where I<HHHH> is the hexadecimal digit.
592
593 =item The bitmask
594
595 These modes are actually set via a bitmask.  Here is how the FB_XX
596 constants are laid out.  You can import the FB_XX constants via
597 C<use Encode qw(:fallbacks)>; you can import the generic bitmask
598 constants via C<use Encode qw(:fallback_all)>.
599
600                      FB_DEFAULT FB_CROAK FB_QUIET FB_WARN  FB_PERLQQ
601  DIE_ON_ERR    0x0001             X
602  WARN_ON_ERR   0x0002                               X
603  RETURN_ON_ERR 0x0004                      X        X
604  LEAVE_SRC     0x0008
605  PERLQQ        0x0100                                        X
606  HTMLCREF      0x0200
607  XMLCREF       0x0400
608
609 =head2 Unimplemented fallback schemes
610
611 In the future, you will be able to use a code reference to a callback
612 function for the value of I<CHECK> but its API is still undecided.
613
614 The fallback scheme does not work on EBCDIC platforms.
615
616 =head1 Defining Encodings
617
618 To define a new encoding, use:
619
620     use Encode qw(define_encoding);
621     define_encoding($object, 'canonicalName' [, alias...]);
622
623 I<canonicalName> will be associated with I<$object>.  The object
624 should provide the interface described in L<Encode::Encoding>.
625 If more than two arguments are provided then additional
626 arguments are taken as aliases for I<$object>.
627
628 See L<Encode::Encoding> for more details.
629
630 =head1 The UTF-8 flag
631
632 Before the introduction of utf8 support in perl, The C<eq> operator
633 just compared the strings represented by two scalars. Beginning with
634 perl 5.8, C<eq> compares two strings with simultaneous consideration
635 of I<the utf8 flag>. To explain why we made it so, I will quote page
636 402 of C<Programming Perl, 3rd ed.>
637
638 =over 2
639
640 =item Goal #1:
641
642 Old byte-oriented programs should not spontaneously break on the old
643 byte-oriented data they used to work on.
644
645 =item Goal #2:
646
647 Old byte-oriented programs should magically start working on the new
648 character-oriented data when appropriate.
649
650 =item Goal #3:
651
652 Programs should run just as fast in the new character-oriented mode
653 as in the old byte-oriented mode.
654
655 =item Goal #4:
656
657 Perl should remain one language, rather than forking into a
658 byte-oriented Perl and a character-oriented Perl.
659
660 =back
661
662 Back when C<Programming Perl, 3rd ed.> was written, not even Perl 5.6.0
663 was born and many features documented in the book remained
664 unimplemented for a long time.  Perl 5.8 corrected this and the introduction
665 of the UTF-8 flag is one of them.  You can think of this perl notion as of a
666 byte-oriented mode (utf8 flag off) and a character-oriented mode (utf8
667 flag on).
668
669 Here is how Encode takes care of the utf8 flag.
670
671 =over 2
672
673 =item *
674
675 When you encode, the resulting utf8 flag is always off.
676
677 =item
678
679 When you decode, the resulting utf8 flag is on unless you can
680 unambiguously represent data.  Here is the definition of
681 dis-ambiguity.
682
683 After C<$utf8 = decode('foo', $octet);>,
684
685   When $octet is...   The utf8 flag in $utf8 is
686   ---------------------------------------------
687   In ASCII only (or EBCDIC only)            OFF
688   In ISO-8859-1                              ON
689   In any other Encoding                      ON
690   ---------------------------------------------
691
692 As you see, there is one exception, In ASCII.  That way you can assue
693 Goal #1.  And with Encode Goal #2 is assumed but you still have to be
694 careful in such cases mentioned in B<CAVEAT> paragraphs.
695
696 This utf8 flag is not visible in perl scripts, exactly for the same
697 reason you cannot (or you I<don't have to>) see if a scalar contains a
698 string, integer, or floating point number.   But you can still peek
699 and poke these if you will.  See the section below.
700
701 =back
702
703 =head2 Messing with Perl's Internals
704
705 The following API uses parts of Perl's internals in the current
706 implementation.  As such, they are efficient but may change.
707
708 =over 2
709
710 =item is_utf8(STRING [, CHECK])
711
712 [INTERNAL] Tests whether the UTF-8 flag is turned on in the STRING.
713 If CHECK is true, also checks the data in STRING for being well-formed
714 UTF-8.  Returns true if successful, false otherwise.
715
716 =item _utf8_on(STRING)
717
718 [INTERNAL] Turns on the UTF-8 flag in STRING.  The data in STRING is
719 B<not> checked for being well-formed UTF-8.  Do not use unless you
720 B<know> that the STRING is well-formed UTF-8.  Returns the previous
721 state of the UTF-8 flag (so please don't treat the return value as
722 indicating success or failure), or C<undef> if STRING is not a string.
723
724 =item _utf8_off(STRING)
725
726 [INTERNAL] Turns off the UTF-8 flag in STRING.  Do not use frivolously.
727 Returns the previous state of the UTF-8 flag (so please don't treat the
728 return value as indicating success or failure), or C<undef> if STRING is
729 not a string.
730
731 =back
732
733 =head1 SEE ALSO
734
735 L<Encode::Encoding>,
736 L<Encode::Supported>,
737 L<Encode::PerlIO>,
738 L<encoding>,
739 L<perlebcdic>,
740 L<perlfunc/open>,
741 L<perlunicode>,
742 L<utf8>,
743 the Perl Unicode Mailing List E<lt>perl-unicode@perl.orgE<gt>
744
745 =head1 MAINTAINER
746
747 This project was originated by Nick Ing-Simmons and later maintained
748 by Dan Kogai E<lt>dankogai@dan.co.jpE<gt>.  See AUTHORS for a full
749 list of people involved.  For any questions, use
750 E<lt>perl-unicode@perl.orgE<gt> so we can all share.
751
752 =cut