small corrections
[p5sagit/p5-mst-13.2.git] / ext / Encode / Encode.pm
CommitLineData
2c674647 1package Encode;
51ef4e11 2use strict;
0ab8f81e 3our $VERSION = do { my @r = (q$Revision: 1.56 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
5129552c 4our $DEBUG = 0;
6d1c0808 5use XSLoader ();
6XSLoader::load 'Encode';
2c674647 7
2c674647 8require Exporter;
6d1c0808 9our @ISA = qw(Exporter);
2c674647 10
4411f3b6 11# Public, encouraged API is exported by default
85982a32 12
13our @EXPORT = qw(
14 decode decode_utf8 encode encode_utf8
15 encodings find_encoding
4411f3b6 16);
17
85982a32 18our @FB_FLAGS = qw(DIE_ON_ERR WARN_ON_ERR RETURN_ON_ERR LEAVE_SRC PERLQQ);
19our @FB_CONSTS = qw(FB_DEFAULT FB_QUIET FB_WARN FB_PERLQQ FB_CROAK);
20
51ef4e11 21our @EXPORT_OK =
6d1c0808 22 (
85982a32 23 qw(
24 _utf8_off _utf8_on define_encoding from_to is_16bit is_8bit
25 is_utf8 perlio_ok resolve_alias utf8_downgrade utf8_upgrade
26 ),
27 @FB_FLAGS, @FB_CONSTS,
28 );
29
6d1c0808 30our %EXPORT_TAGS =
85982a32 31 (
32 all => [ @EXPORT, @EXPORT_OK ],
33 fallbacks => [ @FB_CONSTS ],
34 fallback_all => [ @FB_CONSTS, @FB_FLAGS ],
35 );
36
4411f3b6 37# Documentation moved after __END__ for speed - NI-S
2c674647 38
bf230f3d 39use Carp;
40
a63c962f 41our $ON_EBCDIC = (ord("A") == 193);
f2a2953c 42
5d030b67 43use Encode::Alias;
44
5129552c 45# Make a %Encoding package variable to allow a certain amount of cheating
46our %Encoding;
aae85ceb 47our %ExtModule;
48require Encode::Config;
49eval { require Encode::ConfigLocal };
5129552c 50
656753f8 51sub encodings
52{
5129552c 53 my $class = shift;
071db25d 54 my @modules = (@_ and $_[0] eq ":all") ? values %ExtModule : @_;
c731e18e 55 for my $mod (@modules){
56 $mod =~ s,::,/,g or $mod = "Encode/$mod";
6d1c0808 57 $mod .= '.pm';
c731e18e 58 $DEBUG and warn "about to require $mod;";
59 eval { require $mod; };
5129552c 60 }
c731e18e 61 my %modules = map {$_ => 1} @modules;
5129552c 62 return
ce912cd4 63 sort { lc $a cmp lc $b }
64 grep {!/^(?:Internal|Unicode)$/o} keys %Encoding;
51ef4e11 65}
66
85982a32 67sub perlio_ok{
68 exists $INC{"PerlIO/encoding.pm"} or return 0;
0ab8f81e 69 my $obj = ref($_[0]) ? $_[0] : find_encoding($_[0]);
70 $obj->can("perlio_ok") and return $obj->perlio_ok() unless $@;
71 return 0; # safety net
85982a32 72}
73
51ef4e11 74sub define_encoding
75{
18586f54 76 my $obj = shift;
77 my $name = shift;
5129552c 78 $Encoding{$name} = $obj;
18586f54 79 my $lc = lc($name);
80 define_alias($lc => $obj) unless $lc eq $name;
81 while (@_)
82 {
83 my $alias = shift;
84 define_alias($alias,$obj);
85 }
86 return $obj;
656753f8 87}
88
656753f8 89sub getEncoding
90{
dd9703c9 91 my ($class,$name,$skip_external) = @_;
18586f54 92 my $enc;
93 if (ref($name) && $name->can('new_sequence'))
94 {
95 return $name;
96 }
97 my $lc = lc $name;
5129552c 98 if (exists $Encoding{$name})
18586f54 99 {
5129552c 100 return $Encoding{$name};
18586f54 101 }
5129552c 102 if (exists $Encoding{$lc})
18586f54 103 {
5129552c 104 return $Encoding{$lc};
18586f54 105 }
c50d192e 106
5129552c 107 my $oc = $class->find_alias($name);
c50d192e 108 return $oc if defined $oc;
109
5129552c 110 $oc = $class->find_alias($lc) if $lc ne $name;
c50d192e 111 return $oc if defined $oc;
112
c731e18e 113 unless ($skip_external)
d1ed7747 114 {
c731e18e 115 if (my $mod = $ExtModule{$name} || $ExtModule{$lc}){
116 $mod =~ s,::,/,g ; $mod .= '.pm';
117 eval{ require $mod; };
118 return $Encoding{$name} if exists $Encoding{$name};
119 }
d1ed7747 120 }
18586f54 121 return;
656753f8 122}
123
4411f3b6 124sub find_encoding
125{
dd9703c9 126 my ($name,$skip_external) = @_;
127 return __PACKAGE__->getEncoding($name,$skip_external);
4411f3b6 128}
129
fcb875d4 130sub resolve_alias {
131 my $obj = find_encoding(shift);
132 defined $obj and return $obj->name;
133 return;
134}
135
b2704119 136sub encode($$;$)
4411f3b6 137{
18586f54 138 my ($name,$string,$check) = @_;
b2704119 139 $check ||=0;
18586f54 140 my $enc = find_encoding($name);
141 croak("Unknown encoding '$name'") unless defined $enc;
142 my $octets = $enc->encode($string,$check);
143 return undef if ($check && length($string));
144 return $octets;
4411f3b6 145}
146
b2704119 147sub decode($$;$)
4411f3b6 148{
18586f54 149 my ($name,$octets,$check) = @_;
b2704119 150 $check ||=0;
18586f54 151 my $enc = find_encoding($name);
152 croak("Unknown encoding '$name'") unless defined $enc;
153 my $string = $enc->decode($octets,$check);
154 $_[1] = $octets if $check;
155 return $string;
4411f3b6 156}
157
b2704119 158sub from_to($$$;$)
4411f3b6 159{
18586f54 160 my ($string,$from,$to,$check) = @_;
b2704119 161 $check ||=0;
18586f54 162 my $f = find_encoding($from);
163 croak("Unknown encoding '$from'") unless defined $f;
164 my $t = find_encoding($to);
165 croak("Unknown encoding '$to'") unless defined $t;
166 my $uni = $f->decode($string,$check);
167 return undef if ($check && length($string));
a999c27c 168 $string = $t->encode($uni,$check);
18586f54 169 return undef if ($check && length($uni));
3ef515df 170 return defined($_[0] = $string) ? length($string) : undef ;
4411f3b6 171}
172
b2704119 173sub encode_utf8($)
4411f3b6 174{
18586f54 175 my ($str) = @_;
c731e18e 176 utf8::encode($str);
18586f54 177 return $str;
4411f3b6 178}
179
b2704119 180sub decode_utf8($)
4411f3b6 181{
18586f54 182 my ($str) = @_;
183 return undef unless utf8::decode($str);
184 return $str;
5ad8ef52 185}
186
f2a2953c 187predefine_encodings();
188
189#
190# This is to restore %Encoding if really needed;
191#
192sub predefine_encodings{
6d1c0808 193 if ($ON_EBCDIC) {
f2a2953c 194 # was in Encode::UTF_EBCDIC
195 package Encode::UTF_EBCDIC;
196 *name = sub{ shift->{'Name'} };
197 *new_sequence = sub{ return $_[0] };
198 *decode = sub{
199 my ($obj,$str,$chk) = @_;
200 my $res = '';
201 for (my $i = 0; $i < length($str); $i++) {
6d1c0808 202 $res .=
f2a2953c 203 chr(utf8::unicode_to_native(ord(substr($str,$i,1))));
204 }
205 $_[1] = '' if $chk;
206 return $res;
207 };
208 *encode = sub{
209 my ($obj,$str,$chk) = @_;
210 my $res = '';
211 for (my $i = 0; $i < length($str); $i++) {
6d1c0808 212 $res .=
f2a2953c 213 chr(utf8::native_to_unicode(ord(substr($str,$i,1))));
214 }
215 $_[1] = '' if $chk;
216 return $res;
217 };
6d1c0808 218 $Encode::Encoding{Unicode} =
c731e18e 219 bless {Name => "UTF_EBCDIC"} => "Encode::UTF_EBCDIC";
6d1c0808 220 } else {
f2a2953c 221 # was in Encode::UTF_EBCDIC
222 package Encode::Internal;
223 *name = sub{ shift->{'Name'} };
224 *new_sequence = sub{ return $_[0] };
225 *decode = sub{
226 my ($obj,$str,$chk) = @_;
227 utf8::upgrade($str);
228 $_[1] = '' if $chk;
229 return $str;
230 };
231 *encode = \&decode;
6d1c0808 232 $Encode::Encoding{Unicode} =
c731e18e 233 bless {Name => "Internal"} => "Encode::Internal";
f2a2953c 234 }
235
236 {
237 # was in Encode::utf8
238 package Encode::utf8;
239 *name = sub{ shift->{'Name'} };
240 *new_sequence = sub{ return $_[0] };
241 *decode = sub{
242 my ($obj,$octets,$chk) = @_;
243 my $str = Encode::decode_utf8($octets);
244 if (defined $str) {
245 $_[1] = '' if $chk;
246 return $str;
247 }
248 return undef;
249 };
250 *encode = sub {
251 my ($obj,$string,$chk) = @_;
252 my $octets = Encode::encode_utf8($string);
253 $_[1] = '' if $chk;
254 return $octets;
255 };
0ab8f81e 256 $Encode::Encoding{utf8} =
c731e18e 257 bless {Name => "utf8"} => "Encode::utf8";
f2a2953c 258 }
f2a2953c 259}
260
656753f8 2611;
262
2a936312 263__END__
264
4411f3b6 265=head1 NAME
266
267Encode - character encodings
268
269=head1 SYNOPSIS
270
271 use Encode;
272
67d7b5ef 273=head2 Table of Contents
274
0ab8f81e 275Encode consists of a collection of modules whose details are too big
67d7b5ef 276to fit in one document. This POD itself explains the top-level APIs
6d1c0808 277and general topics at a glance. For other topics and more details,
0ab8f81e 278see the PODs below:
67d7b5ef 279
280 Name Description
281 --------------------------------------------------------
6d1c0808 282 Encode::Alias Alias definitions to encodings
67d7b5ef 283 Encode::Encoding Encode Implementation Base Class
284 Encode::Supported List of Supported Encodings
285 Encode::CN Simplified Chinese Encodings
286 Encode::JP Japanese Encodings
287 Encode::KR Korean Encodings
288 Encode::TW Traditional Chinese Encodings
289 --------------------------------------------------------
290
4411f3b6 291=head1 DESCRIPTION
292
47bfe92f 293The C<Encode> module provides the interfaces between Perl's strings
67d7b5ef 294and the rest of the system. Perl strings are sequences of
295B<characters>.
296
297The repertoire of characters that Perl can represent is at least that
298defined by the Unicode Consortium. On most platforms the ordinal
299values of the characters (as returned by C<ord(ch)>) is the "Unicode
300codepoint" for the character (the exceptions are those platforms where
301the legacy encoding is some variant of EBCDIC rather than a super-set
302of ASCII - see L<perlebcdic>).
303
0ab8f81e 304Traditionally, computer data has been moved around in 8-bit chunks
67d7b5ef 305often called "bytes". These chunks are also known as "octets" in
306networking standards. Perl is widely used to manipulate data of many
307types - not only strings of characters representing human or computer
0ab8f81e 308languages but also "binary" data being the machine's representation of
67d7b5ef 309numbers, pixels in an image - or just about anything.
310
0ab8f81e 311When Perl is processing "binary data", the programmer wants Perl to
67d7b5ef 312process "sequences of bytes". This is not a problem for Perl - as a
0ab8f81e 313byte has 256 possible values, it easily fits in Perl's much larger
67d7b5ef 314"logical character".
315
316=head2 TERMINOLOGY
4411f3b6 317
67d7b5ef 318=over 4
21938dfa 319
67d7b5ef 320=item *
321
322I<character>: a character in the range 0..(2**32-1) (or more).
323(What Perl's strings are made of.)
324
325=item *
326
327I<byte>: a character in the range 0..255
328(A special case of a Perl character.)
329
330=item *
331
332I<octet>: 8 bits of data, with ordinal values 0..255
0ab8f81e 333(Term for bytes passed to or from a non-Perl context, e.g. a disk file.)
67d7b5ef 334
335=back
4411f3b6 336
67d7b5ef 337The marker [INTERNAL] marks Internal Implementation Details, in
338general meant only for those who think they know what they are doing,
339and such details may change in future releases.
340
341=head1 PERL ENCODING API
4411f3b6 342
343=over 4
344
f2a2953c 345=item $octets = encode(ENCODING, $string[, CHECK])
4411f3b6 346
0ab8f81e 347Encodes a string from Perl's internal form into I<ENCODING> and returns
67d7b5ef 348a sequence of octets. ENCODING can be either a canonical name or
0ab8f81e 349an alias. For encoding names and aliases, see L</"Defining Aliases">.
350For CHECK, see L</"Handling Malformed Data">.
4411f3b6 351
0ab8f81e 352For example, to convert (internally UTF-8 encoded) Unicode string to
6d1c0808 353iso-8859-1 (also known as Latin1),
681a7c68 354
67d7b5ef 355 $octets = encode("iso-8859-1", $unicode);
681a7c68 356
f2a2953c 357=item $string = decode(ENCODING, $octets[, CHECK])
4411f3b6 358
0ab8f81e 359Decodes a sequence of octets assumed to be in I<ENCODING> into Perl's
360internal form and returns the resulting string. As in encode(),
361ENCODING can be either a canonical name or an alias. For encoding names
362and aliases, see L</"Defining Aliases">. For CHECK, see
47bfe92f 363L</"Handling Malformed Data">.
364
0ab8f81e 365For example, to convert ISO-8859-1 data to UTF-8:
681a7c68 366
67d7b5ef 367 $utf8 = decode("iso-8859-1", $latin1);
681a7c68 368
f2a2953c 369=item [$length =] from_to($string, FROM_ENCODING, TO_ENCODING [,CHECK])
47bfe92f 370
0ab8f81e 371Converts B<in-place> data between two encodings.
372For example, to convert ISO-8859-1 data to UTF-8:
2b106fbe 373
374 from_to($data, "iso-8859-1", "utf-8");
375
376and to convert it back:
377
378 from_to($data, "utf-8", "iso-8859-1");
4411f3b6 379
ab97ca19 380Note that because the conversion happens in place, the data to be
0ab8f81e 381converted cannot be a string constant; it must be a scalar variable.
ab97ca19 382
0ab8f81e 383from_to() returns the length of the converted string on success, undef
3ef515df 384otherwise.
385
4411f3b6 386=back
387
f2a2953c 388=head2 UTF-8 / utf8
389
0ab8f81e 390The Unicode Consortium defines the UTF-8 transformation format as a
391way of encoding the entire Unicode repertoire as sequences of octets.
392This encoding is expected to become very widespread. Perl can use this
393form internally to represent strings, so conversions to and from this
394form are particularly efficient (as octets in memory do not have to
395change, just the meta-data that tells Perl how to treat them).
f2a2953c 396
397=over 4
398
399=item $octets = encode_utf8($string);
400
0ab8f81e 401The characters that comprise $string are encoded in Perl's superset of
402UTF-8 and the resulting octets are returned as a sequence of bytes. All
403possible characters have a UTF-8 representation so this function cannot
404fail.
f2a2953c 405
406=item $string = decode_utf8($octets [, CHECK]);
407
408The sequence of octets represented by $octets is decoded from UTF-8
409into a sequence of logical characters. Not all sequences of octets
410form valid UTF-8 encodings, so it is possible for this call to fail.
0ab8f81e 411For CHECK, see L</"Handling Malformed Data">.
f2a2953c 412
413=back
414
51ef4e11 415=head2 Listing available encodings
416
5129552c 417 use Encode;
418 @list = Encode->encodings();
419
420Returns a list of the canonical names of the available encodings that
421are loaded. To get a list of all available encodings including the
422ones that are not loaded yet, say
423
424 @all_encodings = Encode->encodings(":all");
425
0ab8f81e 426Or you can give the name of a specific module.
5129552c 427
c731e18e 428 @with_jp = Encode->encodings("Encode::JP");
429
430When "::" is not in the name, "Encode::" is assumed.
51ef4e11 431
c731e18e 432 @ebcdic = Encode->encodings("EBCDIC");
5d030b67 433
0ab8f81e 434To find out in detail which encodings are supported by this package,
5d030b67 435see L<Encode::Supported>.
51ef4e11 436
437=head2 Defining Aliases
438
0ab8f81e 439To add a new alias to a given encoding, use:
67d7b5ef 440
5129552c 441 use Encode;
442 use Encode::Alias;
a63c962f 443 define_alias(newName => ENCODING);
51ef4e11 444
3ef515df 445After that, newName can be used as an alias for ENCODING.
f2a2953c 446ENCODING may be either the name of an encoding or an
447I<encoding object>
51ef4e11 448
fcb875d4 449But before you do so, make sure the alias is nonexistent with
450C<resolve_alias()>, which returns the canonical name thereof.
451i.e.
452
453 Encode::resolve_alias("latin1") eq "iso-8859-1" # true
454 Encode::resolve_alias("iso-8859-12") # false; nonexistent
455 Encode::resolve_alias($name) eq $name # true if $name is canonical
456
0ab8f81e 457resolve_alias() does not need C<use Encode::Alias>; it can be
458exported via C<use Encode qw(resolve_alias)>.
fcb875d4 459
0ab8f81e 460See L<Encode::Alias> for details.
51ef4e11 461
85982a32 462=head1 Encoding via PerlIO
4411f3b6 463
0ab8f81e 464If your perl supports I<PerlIO>, you can use a PerlIO layer to decode
465and encode directly via a filehandle. The following two examples
466are totally identical in their functionality.
4411f3b6 467
85982a32 468 # via PerlIO
469 open my $in, "<:encoding(shiftjis)", $infile or die;
470 open my $out, ">:encoding(euc-jp)", $outfile or die;
471 while(<>){ print; }
8e86646e 472
85982a32 473 # via from_to
0ab8f81e 474 open my $in, "<", $infile or die;
475 open my $out, ">", $outfile or die;
6d1c0808 476 while(<>){
0ab8f81e 477 from_to($_, "shiftjis", "euc-jp", 1);
85982a32 478 }
4411f3b6 479
0ab8f81e 480Unfortunately, there may be encodings are PerlIO-savvy. You can check
481if your encoding is supported by PerlIO by calling the C<perlio_ok>
482method.
483
484 Encode::perlio_ok("hz"); # False
485 find_encoding("euc-cn")->perlio_ok; # True where PerlIO is available
486
487 use Encode qw(perlio_ok); # exported upon request
488 perlio_ok("euc-jp")
4411f3b6 489
0ab8f81e 490Fortunately, all encodings that come with Encode core are PerlIO-savvy
491except for hz and ISO-2022-kr. See L<Encode::Encoding> for details.
4411f3b6 492
0ab8f81e 493For gory details, see L<Encode::PerlIO>.
4411f3b6 494
85982a32 495=head1 Handling Malformed Data
4411f3b6 496
85982a32 497=over 4
47bfe92f 498
0ab8f81e 499The I<CHECK> argument is used as follows. When you omit it,
500the behaviour is the same as if you had passed a value of 0 for
501I<CHECK>.
47bfe92f 502
85982a32 503=item I<CHECK> = Encode::FB_DEFAULT ( == 0)
47bfe92f 504
0ab8f81e 505If I<CHECK> is 0, (en|de)code will put a I<substitution character>
506in place of a malformed character. For UCM-based encodings,
507E<lt>subcharE<gt> will be used. For Unicode, "\x{FFFD}" is used.
508If the data is supposed to be UTF-8, an optional lexical warning
509(category utf8) is given.
e9692b5b 510
85982a32 511=item I<CHECK> = Encode::DIE_ON_ERROR (== 1)
e9692b5b 512
0ab8f81e 513If I<CHECK> is 1, methods will die immediately with an error
514message. Therefore, when I<CHECK> is set to 1, you should trap the
515fatal error with eval{} unless you really want to let it die on error.
47bfe92f 516
85982a32 517=item I<CHECK> = Encode::FB_QUIET
47bfe92f 518
85982a32 519If I<CHECK> is set to Encode::FB_QUIET, (en|de)code will immediately
0ab8f81e 520return the portion of the data that has been processed so far when
521an error occurs. The data argument will be overwritten with
522everything after that point (that is, the unprocessed part of data).
523This is handy when you have to call decode repeatedly in the case
524where your source data may contain partial multi-byte character
525sequences, for example because you are reading with a fixed-width
526buffer. Here is some sample code that does exactly this:
4411f3b6 527
85982a32 528 my $data = '';
529 while(defined(read $fh, $buffer, 256)){
0ab8f81e 530 # buffer may end in a partial character so we append
85982a32 531 $data .= $buffer;
532 $utf8 .= decode($encoding, $data, ENCODE::FB_QUIET);
0ab8f81e 533 # $data now contains the unprocessed partial character
85982a32 534 }
1768d7eb 535
85982a32 536=item I<CHECK> = Encode::FB_WARN
67d7b5ef 537
0ab8f81e 538This is the same as above, except that it warns on error. Handy when
539you are debugging the mode above.
85982a32 540
541=item perlqq mode (I<CHECK> = Encode::FB_PERLQQ)
542
543For encodings that are implemented by Encode::XS, CHECK ==
544Encode::FB_PERLQQ turns (en|de)code into C<perlqq> fallback mode.
545
0ab8f81e 546When you decode, '\xI<XX>' will be inserted for a malformed character,
547where I<XX> is the hex representation of the octet that could not be
548decoded to utf8. And when you encode, '\x{I<xxxx>}' will be inserted,
549where I<xxxx> is the Unicode ID of the character that cannot be found
550in the character repertoire of the encoding.
85982a32 551
552=item The bitmask
553
0ab8f81e 554These modes are actually set via a bitmask. Here is how the FB_XX
555constants are laid out. You can import the FB_XX constants via
556C<use Encode qw(:fallbacks)>; you can import the generic bitmask
557constants via C<use Encode qw(:fallback_all)>.
85982a32 558
b0b300a3 559 FB_DEFAULT FB_CROAK FB_QUIET FB_WARN FB_PERLQQ
560 DIE_ON_ERR 0x0001 X
561 WARN_ON_ER 0x0002 X
562 RETURN_ON_ERR 0x0004 X X
563 LEAVE_SRC 0x0008
564 PERLQQ 0x0100 X
67d7b5ef 565
0ab8f81e 566=head2 Unimplemented fallback schemes
67d7b5ef 567
0ab8f81e 568In the future, you will be able to use a code reference to a callback
f2a2953c 569function for the value of I<CHECK> but its API is still undecided.
67d7b5ef 570
571=head1 Defining Encodings
572
573To define a new encoding, use:
574
575 use Encode qw(define_alias);
576 define_encoding($object, 'canonicalName' [, alias...]);
577
578I<canonicalName> will be associated with I<$object>. The object
0ab8f81e 579should provide the interface described in L<Encode::Encoding>.
67d7b5ef 580If more than two arguments are provided then additional
0ab8f81e 581arguments are taken as aliases for I<$object>, as for C<define_alias>.
67d7b5ef 582
f2a2953c 583See L<Encode::Encoding> for more details.
584
4411f3b6 585=head1 Messing with Perl's Internals
586
47bfe92f 587The following API uses parts of Perl's internals in the current
0ab8f81e 588implementation. As such, they are efficient but may change.
4411f3b6 589
590=over 4
591
a63c962f 592=item is_utf8(STRING [, CHECK])
4411f3b6 593
0ab8f81e 594[INTERNAL] Tests whether the UTF-8 flag is turned on in the STRING.
47bfe92f 595If CHECK is true, also checks the data in STRING for being well-formed
596UTF-8. Returns true if successful, false otherwise.
4411f3b6 597
a63c962f 598=item _utf8_on(STRING)
4411f3b6 599
0ab8f81e 600[INTERNAL] Turns on the UTF-8 flag in STRING. The data in STRING is
4411f3b6 601B<not> checked for being well-formed UTF-8. Do not use unless you
602B<know> that the STRING is well-formed UTF-8. Returns the previous
0ab8f81e 603state of the UTF-8 flag (so please don't treat the return value as
604indicating success or failure), or C<undef> if STRING is not a string.
4411f3b6 605
a63c962f 606=item _utf8_off(STRING)
4411f3b6 607
0ab8f81e 608[INTERNAL] Turns off the UTF-8 flag in STRING. Do not use frivolously.
609Returns the previous state of the UTF-8 flag (so please don't treat the
610return value as indicating success or failure), or C<undef> if STRING is
4411f3b6 611not a string.
612
613=back
614
615=head1 SEE ALSO
616
5d030b67 617L<Encode::Encoding>,
618L<Encode::Supported>,
6d1c0808 619L<Encode::PerlIO>,
5d030b67 620L<encoding>,
6d1c0808 621L<perlebcdic>,
622L<perlfunc/open>,
623L<perlunicode>,
624L<utf8>,
5d030b67 625the Perl Unicode Mailing List E<lt>perl-unicode@perl.orgE<gt>
4411f3b6 626
85982a32 627=head1 MAINTAINER
aae85ceb 628
629This project was originated by Nick Ing-Simmons and later maintained
0ab8f81e 630by Dan Kogai E<lt>dankogai@dan.co.jpE<gt>. See AUTHORS for a full list
aae85ceb 631of people involved. For any questions, use
632E<lt>perl-unicode@perl.orgE<gt> so others can share.
633
4411f3b6 634=cut