a2792259d72f961f1d1ca93e9d4c72bac18007d5
[p5sagit/p5-mst-13.2.git] / ext / Encode / Encode.pm
1 package Encode;
2 use strict;
3 our $VERSION = '0.40';
4
5 require DynaLoader;
6 require Exporter;
7
8 our @ISA = qw(Exporter DynaLoader);
9
10 # Public, encouraged API is exported by default
11 our @EXPORT = qw (
12   encode
13   decode
14   encode_utf8
15   decode_utf8
16   find_encoding
17   encodings
18 );
19
20 our @EXPORT_OK =
21     qw(
22        define_encoding
23        define_alias
24        from_to
25        is_utf8
26        is_8bit
27        is_16bit
28        utf8_upgrade
29        utf8_downgrade
30        _utf8_on
31        _utf8_off
32       );
33
34 bootstrap Encode ();
35
36 # Documentation moved after __END__ for speed - NI-S
37
38 use Carp;
39
40 # Make a %encoding package variable to allow a certain amount of cheating
41 our %encoding;
42 my @alias;  # ordered matching list
43 my %alias;  # cached known aliases
44
45                      # 0  1  2  3  4  5   6   7   8   9  10
46 our @latin2iso_num = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 );
47
48 our %winlatin2cp   = (
49                       'Latin1'     => 1252,
50                       'Latin2'     => 1250,
51                       'Cyrillic'   => 1251,
52                       'Greek'      => 1253,
53                       'Turkish'    => 1254,
54                       'Hebrew'     => 1255,
55                       'Arabic'     => 1256,
56                       'Baltic'     => 1257,
57                       'Vietnamese' => 1258,
58                      );
59
60 our %external_tables = (
61     'euc-cn'            => 'Encode/CN.pm',
62     gb2312              => 'Encode/CN.pm',
63     gb12345             => 'Encode/CN.pm',
64     gbk                 => 'Encode/CN.pm',
65     cp936               => 'Encode/CN.pm',
66     'iso-ir-165'        => 'Encode/CN.pm',
67     'euc-jp'            => 'Encode/JP.pm',
68     shiftjis            => 'Encode/JP.pm',
69     macjapan            => 'Encode/JP.pm',
70     cp932               => 'Encode/JP.pm',
71     'euc-kr'            => 'Encode/KR.pm',
72     ksc5601             => 'Encode/KR.pm',
73     cp949               => 'Encode/KR.pm',
74     big5                => 'Encode/TW.pm',
75     'big5-hkscs'        => 'Encode/TW.pm',
76     cp950               => 'Encode/TW.pm',
77     gb18030             => 'Encode/CN.pm', # HanExtra
78     big5plus            => 'Encode/TW.pm', # HanExtra
79     'euc-tw',           => 'Encode/TW.pm', # HanExtra
80 );
81
82 sub encodings
83 {
84  my ($class) = @_;
85  return
86      map { $_->[0] }
87          sort { $a->[1] cmp $b->[1] }
88                map { [$_, lc $_] }
89                    grep { $_ ne 'Internal' }
90                         keys %encoding;
91 }
92
93 sub findAlias
94 {
95     my $class = shift;
96     local $_ = shift;
97     # print "# findAlias $_\n";
98     unless (exists $alias{$_})
99     {
100         for (my $i=0; $i < @alias; $i += 2)
101         {
102             my $alias = $alias[$i];
103             my $val   = $alias[$i+1];
104             my $new;
105             if (ref($alias) eq 'Regexp' && $_ =~ $alias)
106             {
107                 $new = eval $val;
108             }
109             elsif (ref($alias) eq 'CODE')
110             {
111                 $new = &{$alias}($val)
112                 }
113             elsif (lc($_) eq lc($alias))
114             {
115                 $new = $val;
116             }
117             if (defined($new))
118             {
119                 next if $new eq $_; # avoid (direct) recursion on bugs
120                 my $enc = (ref($new)) ? $new : find_encoding($new);
121                 if ($enc)
122                 {
123                     $alias{$_} = $enc;
124                     last;
125                 }
126             }
127         }
128     }
129     return $alias{$_};
130 }
131
132 sub define_alias
133 {
134     while (@_)
135     {
136         my ($alias,$name) = splice(@_,0,2);
137         push(@alias, $alias => $name);
138     }
139 }
140
141 # Allow variants of iso-8859-1 etc.
142 define_alias( qr/^iso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' );
143
144 # At least HP-UX has these.
145 define_alias( qr/^iso8859(\d+)$/i => '"iso-8859-$1"' );
146
147 # More HP stuff.
148 define_alias( qr/^(?:hp-)?(arabic|greek|hebrew|kana|roman|thai|turkish)8$/i => '"${1}8"' );
149
150 # The Official name of ASCII.
151 define_alias( qr/^ANSI[-_]?X3\.4[-_]?1968$/i => '"ascii"' );
152
153 # This is a font issue, not an encoding issue.
154 # (The currency symbol of the Latin 1 upper half
155 #  has been redefined as the euro symbol.)
156 define_alias( qr/^(.+)\@euro$/i => '"$1"' );
157
158 # Allow latin-1 style names as well
159 define_alias( qr/^(?:iso[-_]?)?latin[-_]?(\d+)$/i => '"iso-8859-$latin2iso_num[$1]"' );
160
161 # Allow winlatin1 style names as well
162 define_alias( qr/^win(latin[12]|cyrillic|baltic|greek|turkish|hebrew|arabic|baltic|vietnamese)$/i => '"cp$winlatin2cp{\u$1}"' );
163
164 # Common names for non-latin prefered MIME names
165 define_alias( 'ascii'    => 'US-ascii',
166               'cyrillic' => 'iso-8859-5',
167               'arabic'   => 'iso-8859-6',
168               'greek'    => 'iso-8859-7',
169               'hebrew'   => 'iso-8859-8',
170               'thai'     => 'iso-8859-11',
171               'tis620'   => 'iso-8859-11',
172             );
173
174 # At least AIX has IBM-NNN (surprisingly...) instead of cpNNN.
175 # And Microsoft has their own naming (again, surprisingly).
176 define_alias( qr/^(?:ibm|ms)[-_]?(\d\d\d\d?)$/i => '"cp$1"');
177
178 # Sometimes seen with a leading zero.
179 define_alias( qr/^cp037$/i => '"cp37"');
180
181 # Ououououou.
182 define_alias( qr/^macRomanian$/i => '"macRumanian"');
183
184 # Standardize on the dashed versions.
185 define_alias( qr/^utf8$/i  => 'utf-8' );
186 define_alias( qr/^koi8r$/i => 'koi8-r' );
187 define_alias( qr/^koi8u$/i => 'koi8-u' );
188
189 # Seen in some Linuxes.
190 define_alias( qr/^ujis$/i => 'euc-jp' );
191
192 # CP936 doesn't have vendor-addon for GBK, so they're identical.
193 define_alias( qr/^gbk$/i => '"cp936"');
194
195 # TODO: HP-UX '8' encodings arabic8 greek8 hebrew8 kana8 thai8 turkish8
196 # TODO: HP-UX '15' encodings japanese15 korean15 roi15
197 # TODO: Cyrillic encoding ISO-IR-111 (useful?)
198 # TODO: Armenian encoding ARMSCII-8
199 # TODO: Hebrew encoding ISO-8859-8-1
200 # TODO: Thai encoding TCVN
201 # TODO: Korean encoding Johab
202 # TODO: Vietnamese encodings VPS
203 # TODO: Japanese encoding JIS (not the same as SJIS)
204 # TODO: Mac Asian+African encodings: Arabic Armenian Bengali Burmese
205 #       ChineseSimp ChineseTrad Devanagari Ethiopic ExtArabic
206 #       Farsi Georgian Gujarati Gurmukhi Hebrew Japanese
207 #       Kannada Khmer Korean Laotian Malayalam Mongolian
208 #       Oriya Sinhalese Symbol Tamil Telugu Tibetan Vietnamese
209
210 # Map white space and _ to '-'
211 define_alias( qr/^(\S+)[\s_]+(.*)$/i => '"$1-$2"' );
212
213 sub define_encoding
214 {
215     my $obj  = shift;
216     my $name = shift;
217     $encoding{$name} = $obj;
218     my $lc = lc($name);
219     define_alias($lc => $obj) unless $lc eq $name;
220     while (@_)
221     {
222         my $alias = shift;
223         define_alias($alias,$obj);
224     }
225     return $obj;
226 }
227
228 sub getEncoding
229 {
230     my ($class,$name) = @_;
231     my $enc;
232     if (ref($name) && $name->can('new_sequence'))
233     {
234         return $name;
235     }
236     my $lc = lc $name;
237     if (exists $encoding{$name})
238     {
239         return $encoding{$name};
240     }
241     if (exists $encoding{$lc})
242     {
243         return $encoding{$lc};
244     }
245     if (exists $external_tables{$lc})
246     {
247         require $external_tables{$lc};
248         return $encoding{$name} if exists $encoding{$name};
249     }
250
251     my $oc = $class->findAlias($name);
252     return $oc if defined $oc;
253     return $class->findAlias($lc) if $lc ne $name;
254
255     return;
256 }
257
258 sub find_encoding
259 {
260     my ($name) = @_;
261     return __PACKAGE__->getEncoding($name);
262 }
263
264 sub encode
265 {
266     my ($name,$string,$check) = @_;
267     my $enc = find_encoding($name);
268     croak("Unknown encoding '$name'") unless defined $enc;
269     my $octets = $enc->encode($string,$check);
270     return undef if ($check && length($string));
271     return $octets;
272 }
273
274 sub decode
275 {
276     my ($name,$octets,$check) = @_;
277     my $enc = find_encoding($name);
278     croak("Unknown encoding '$name'") unless defined $enc;
279     my $string = $enc->decode($octets,$check);
280     $_[1] = $octets if $check;
281     return $string;
282 }
283
284 sub from_to
285 {
286     my ($string,$from,$to,$check) = @_;
287     my $f = find_encoding($from);
288     croak("Unknown encoding '$from'") unless defined $f;
289     my $t = find_encoding($to);
290     croak("Unknown encoding '$to'") unless defined $t;
291     my $uni = $f->decode($string,$check);
292     return undef if ($check && length($string));
293     $string = $t->encode($uni,$check);
294     return undef if ($check && length($uni));
295     return length($_[0] = $string);
296 }
297
298 sub encode_utf8
299 {
300     my ($str) = @_;
301   utf8::encode($str);
302     return $str;
303 }
304
305 sub decode_utf8
306 {
307     my ($str) = @_;
308     return undef unless utf8::decode($str);
309     return $str;
310 }
311
312 require Encode::Encoding;
313 require Encode::XS;
314 require Encode::Internal;
315 require Encode::Unicode;
316 require Encode::utf8;
317 require Encode::iso10646_1;
318 require Encode::ucs2_le;
319
320 1;
321
322 __END__
323
324 =head1 NAME
325
326 Encode - character encodings
327
328 =head1 SYNOPSIS
329
330     use Encode;
331
332 =head1 DESCRIPTION
333
334 The C<Encode> module provides the interfaces between Perl's strings
335 and the rest of the system.  Perl strings are sequences of B<characters>.
336
337 The repertoire of characters that Perl can represent is at least that
338 defined by the Unicode Consortium. On most platforms the ordinal
339 values of the characters (as returned by C<ord(ch)>) is the "Unicode
340 codepoint" for the character (the exceptions are those platforms where
341 the legacy encoding is some variant of EBCDIC rather than a super-set
342 of ASCII - see L<perlebcdic>).
343
344 Traditionaly computer data has been moved around in 8-bit chunks
345 often called "bytes". These chunks are also known as "octets" in
346 networking standards. Perl is widely used to manipulate data of
347 many types - not only strings of characters representing human or
348 computer languages but also "binary" data being the machines representation
349 of numbers, pixels in an image - or just about anything.
350
351 When Perl is processing "binary data" the programmer wants Perl to process
352 "sequences of bytes". This is not a problem for Perl - as a byte has 256
353 possible values it easily fits in Perl's much larger "logical character".
354
355 Due to size concerns, each of B<CJK> (Chinese, Japanese & Korean) modules
356 are not loaded in memory until the first time they're used. Although you
357 don't have to C<use> the corresponding B<Encode::>(B<TW>|B<CN>|B<JP>|B<KR>)
358 modules first, be aware that those encodings will not be in C<%encodings>
359 until their module is loaded (either implicitly through using encodings
360 contained in the same module, or via an explicit C<use>).
361
362 =head2 TERMINOLOGY
363
364 =over 4
365
366 =item *
367
368 I<character>: a character in the range 0..(2**32-1) (or more).
369 (What Perl's strings are made of.)
370
371 =item *
372
373 I<byte>: a character in the range 0..255
374 (A special case of a Perl character.)
375
376 =item *
377
378 I<octet>: 8 bits of data, with ordinal values 0..255
379 (Term for bytes passed to or from a non-Perl context, e.g. disk file.)
380
381 =back
382
383 The marker [INTERNAL] marks Internal Implementation Details, in
384 general meant only for those who think they know what they are doing,
385 and such details may change in future releases.
386
387 =head1 ENCODINGS
388
389 =head2 Characteristics of an Encoding
390
391 An encoding has a "repertoire" of characters that it can represent,
392 and for each representable character there is at least one sequence of
393 octets that represents it.
394
395 =head2 Types of Encodings
396
397 Encodings can be divided into the following types:
398
399 =over 4
400
401 =item * Fixed length 8-bit (or less) encodings.
402
403 Each character is a single octet so may have a repertoire of up to
404 256 characters. ASCII and iso-8859-* are typical examples.
405
406 =item * Fixed length 16-bit encodings
407
408 Each character is two octets so may have a repertoire of up to
409 65 536 characters.  Unicode's UCS-2 is an example.  Also used for
410 encodings for East Asian languages.
411
412 =item * Fixed length 32-bit encodings.
413
414 Not really very "encoded" encodings. The Unicode code points
415 are just represented as 4-octet integers. None the less because
416 different architectures use different representations of integers
417 (so called "endian") there at least two disctinct encodings.
418
419 =item * Multi-byte encodings
420
421 The number of octets needed to represent a character varies.
422 UTF-8 is a particularly complex but regular case of a multi-byte
423 encoding. Several East Asian countries use a multi-byte encoding
424 where 1-octet is used to cover western roman characters and Asian
425 characters get 2-octets.
426 (UTF-16 is strictly a multi-byte encoding taking either 2 or 4 octets
427 to represent a Unicode code point.)
428
429 =item * "Escape" encodings.
430
431 These encodings embed "escape sequences" into the octet sequence
432 which describe how the following octets are to be interpreted.
433 The iso-2022-* family is typical. Following the escape sequence
434 octets are encoded by an "embedded" encoding (which will be one
435 of the above types) until another escape sequence switches to
436 a different "embedded" encoding.
437
438 These schemes are very flexible and can handle mixed languages but are
439 very complex to process (and have state).  No escape encodings are
440 implemented for Perl yet.
441
442 =back
443
444 =head2 Specifying Encodings
445
446 Encodings can be specified to the API described below in two ways:
447
448 =over 4
449
450 =item 1. By name
451
452 Encoding names are strings with characters taken from a restricted
453 repertoire.  See L</"Encoding Names">.
454
455 =item 2. As an object
456
457 Encoding objects are returned by C<find_encoding($name)>.
458
459 =back
460
461 =head2 Encoding Names
462
463 Encoding names are case insensitive. White space in names is ignored.
464 In addition an encoding may have aliases. Each encoding has one
465 "canonical" name.  The "canonical" name is chosen from the names of
466 the encoding by picking the first in the following sequence:
467
468 =over 4
469
470 =item * The MIME name as defined in IETF RFCs.
471
472 =item * The name in the IANA registry.
473
474 =item * The name used by the organization that defined it.
475
476 =back
477
478 Because of all the alias issues, and because in the general case
479 encodings have state C<Encode> uses the encoding object internally
480 once an operation is in progress.
481
482 As of Perl 5.8.0, at least the following encodings are recognized
483 (the => marks aliases):
484
485   ASCII
486
487   US-ASCII => ASCII
488
489 The Unicode:
490
491   UTF-8
492   UTF-16
493   UCS-2
494
495   ISO 10646-1 => UCS-2
496
497 The ISO 8859 and KOI:
498
499   ISO 8859-1  ISO 8859-6   ISO 8859-11         KOI8-F
500   ISO 8859-2  ISO 8859-7   (12 doesn't exist)  KOI8-R
501   ISO 8859-3  ISO 8859-8   ISO 8859-13         KOI8-U
502   ISO 8859-4  ISO 8859-9   ISO 8859-14
503   ISO 8859-5  ISO 8859-10  ISO 8859-15
504                            ISO 8859-16
505
506   Latin1  => 8859-1  Latin6  => 8859-10
507   Latin2  => 8859-2  Latin7  => 8859-13
508   Latin3  => 8859-3  Latin8  => 8859-14
509   Latin4  => 8859-4  Latin9  => 8859-15
510   Latin5  => 8859-9  Latin10 => 8859-16
511
512   Cyrillic => 8859-5
513   Arabic   => 8859-6
514   Greek    => 8859-7
515   Hebrew   => 8859-8
516   Thai     => 8859-11
517   TIS620   => 8859-11
518
519 The CJKV: Chinese, Japanese, Korean, Vietnamese:
520
521   ISO 2022     ISO 2022 JP-1  JIS 0201  GB 1988   Big5       EUC-CN
522   ISO 2022 CN  ISO 2022 JP-2  JIS 0208  GB 2312   HZ         EUC-JP
523   ISO 2022 JP  ISO 2022 KR    JIS 0210  GB 12345  CNS 11643  EUC-JP-0212
524   Shift-JIS                             GBK       Big5-HKSCS EUC-KR
525   VISCII                                ISO-IR-165
526
527 (Due to size concerns, additional Chinese encodings including C<GB 18030>,
528 C<EUC-TW> and C<BIG5PLUS> are distributed separately on CPAN, under the name
529 L<Encode::HanExtra>.)
530
531 The PC codepages:
532
533   CP37   CP852  CP861  CP866  CP949   CP1251  CP1256
534   CP424  CP855  CP862  CP869  CP950   CP1252  CP1257
535   CP737  CP856  CP863  CP874  CP1006  CP1253  CP1258
536   CP775  CP857  CP864  CP932  CP1047  CP1254
537   CP850  CP860  CP865  CP936  CP1250  CP1255
538
539   WinLatin1     => CP1252
540   WinLatin2     => CP1250
541   WinCyrillic   => CP1251
542   WinGreek      => CP1253
543   WinTurkiskh   => CP1254
544   WinHebrew     => CP1255
545   WinArabic     => CP1256
546   WinBaltic     => CP1257
547   WinVietnamese => CP1258
548
549 (All the CPI<NNN...> are available also as IBMI<NNN...>.)
550
551 The Mac codepages:
552
553   MacCentralEuropean   MacJapanese
554   MacCroatian          MacRoman
555   MacCyrillic          MacRomanian
556   MacDingbats          MacSami
557   MacGreek             MacThai
558   MacIcelandic         MacTurkish
559                        MacUkraine
560
561 Miscellaneous:
562
563   7bit-greek  IR-197
564   7bit-kana   NeXTstep
565   7bit-latin1 POSIX-BC
566   DingBats    Roman8
567   GSM 0338    Symbol
568
569 =head1 PERL ENCODING API
570
571 =head2 Generic Encoding Interface
572
573 =over 4
574
575 =item *
576
577         $bytes  = encode(ENCODING, $string[, CHECK])
578
579 Encodes string from Perl's internal form into I<ENCODING> and returns
580 a sequence of octets.  For CHECK see L</"Handling Malformed Data">.
581
582 For example to convert (internally UTF-8 encoded) Unicode data
583 to octets:
584
585         $octets = encode("utf8", $unicode);
586
587 =item *
588
589         $string = decode(ENCODING, $bytes[, CHECK])
590
591 Decode sequence of octets assumed to be in I<ENCODING> into Perl's
592 internal form and returns the resulting string.  For CHECK see
593 L</"Handling Malformed Data">.
594
595 For example to convert ISO 8859-1 data to UTF-8:
596
597         $utf8 = decode("latin1", $latin1);
598
599 =item *
600
601         from_to($string, FROM_ENCODING, TO_ENCODING[, CHECK])
602
603 Convert B<in-place> the data between two encodings.  How did the data
604 in $string originally get to be in FROM_ENCODING?  Either using
605 encode() or through PerlIO: See L</"Encoding and IO">.  For CHECK
606 see L</"Handling Malformed Data">.
607
608 For example to convert ISO 8859-1 data to UTF-8:
609
610         from_to($data, "iso-8859-1", "utf-8");
611
612 and to convert it back:
613
614         from_to($data, "utf-8", "iso-8859-1");
615
616 Note that because the conversion happens in place, the data to be
617 converted cannot be a string constant, it must be a scalar variable.
618
619 =back
620
621 =head2 Handling Malformed Data
622
623 If CHECK is not set, C<undef> is returned.  If the data is supposed to
624 be UTF-8, an optional lexical warning (category utf8) is given.  If
625 CHECK is true but not a code reference, dies.
626
627 It would desirable to have a way to indicate that transform should use
628 the encodings "replacement character" - no such mechanism is defined yet.
629
630 It is also planned to allow I<CHECK> to be a code reference.
631
632 This is not yet implemented as there are design issues with what its
633 arguments should be and how it returns its results.
634
635 =over 4
636
637 =item Scheme 1
638
639 Passed remaining fragment of string being processed.
640 Modifies it in place to remove bytes/characters it can understand
641 and returns a string used to represent them.
642 e.g.
643
644  sub fixup {
645    my $ch = substr($_[0],0,1,'');
646    return sprintf("\x{%02X}",ord($ch);
647  }
648
649 This scheme is close to how underlying C code for Encode works, but gives
650 the fixup routine very little context.
651
652 =item Scheme 2
653
654 Passed original string, and an index into it of the problem area, and
655 output string so far.  Appends what it will to output string and
656 returns new index into original string.  For example:
657
658  sub fixup {
659    # my ($s,$i,$d) = @_;
660    my $ch = substr($_[0],$_[1],1);
661    $_[2] .= sprintf("\x{%02X}",ord($ch);
662    return $_[1]+1;
663  }
664
665 This scheme gives maximal control to the fixup routine but is more
666 complicated to code, and may need internals of Encode to be tweaked to
667 keep original string intact.
668
669 =item Other Schemes
670
671 Hybrids of above.
672
673 Multiple return values rather than in-place modifications.
674
675 Index into the string could be pos($str) allowing s/\G...//.
676
677 =back
678
679 =head2 UTF-8 / utf8
680
681 The Unicode consortium defines the UTF-8 standard as a way of encoding
682 the entire Unicode repertiore as sequences of octets.  This encoding is
683 expected to become very widespread. Perl can use this form internaly
684 to represent strings, so conversions to and from this form are
685 particularly efficient (as octets in memory do not have to change,
686 just the meta-data that tells Perl how to treat them).
687
688 =over 4
689
690 =item *
691
692         $bytes = encode_utf8($string);
693
694 The characters that comprise string are encoded in Perl's superset of UTF-8
695 and the resulting octets returned as a sequence of bytes. All possible
696 characters have a UTF-8 representation so this function cannot fail.
697
698 =item *
699
700         $string = decode_utf8($bytes [,CHECK]);
701
702 The sequence of octets represented by $bytes is decoded from UTF-8
703 into a sequence of logical characters. Not all sequences of octets
704 form valid UTF-8 encodings, so it is possible for this call to fail.
705 For CHECK see L</"Handling Malformed Data">.
706
707 =back
708
709 =head2 Other Encodings of Unicode
710
711 UTF-16 is similar to UCS-2, 16 bit or 2-byte chunks.  UCS-2 can only
712 represent 0..0xFFFF, while UTF-16 has a I<surrogate pair> scheme which
713 allows it to cover the whole Unicode range.
714
715 Surrogates are code points set aside to encode the 0x01000..0x10FFFF
716 range of Unicode code points in pairs of 16-bit units.  The I<high
717 surrogates> are the range 0xD800..0xDBFF, and the I<low surrogates>
718 are the range 0xDC00..0xDFFFF.  The surrogate encoding is
719
720         $hi = ($uni - 0x10000) / 0x400 + 0xD800;
721         $lo = ($uni - 0x10000) % 0x400 + 0xDC00;
722
723 and the decoding is
724
725         $uni = 0x10000 + ($hi - 0xD8000) * 0x400 + ($lo - 0xDC00);
726
727 Encode implements big-endian UCS-2 aliased to "iso-10646-1" as that
728 happens to be the name used by that representation when used with X11
729 fonts.
730
731 UTF-32 or UCS-4 is 32-bit or 4-byte chunks.  Perl's logical characters
732 can be considered as being in this form without encoding. An encoding
733 to transfer strings in this form (e.g. to write them to a file) would
734 need to
735
736      pack('L*', unpack('U*', $string));  # native
737   or
738      pack('V*', unpack('U*', $string));  # little-endian
739   or
740      pack('N*', unpack('U*', $string));  # big-endian
741
742 depending on the endianness required.
743
744 No UTF-32 encodings are implemented yet.
745
746 Both UCS-2 and UCS-4 style encodings can have "byte order marks" by
747 representing the code point 0xFFFE as the very first thing in a file.
748
749 =head2 Listing available encodings
750
751   use Encode qw(encodings);
752   @list = encodings();
753
754 Returns a list of the canonical names of the available encodings.
755
756 =head2 Defining Aliases
757
758   use Encode qw(define_alias);
759   define_alias( newName => ENCODING);
760
761 Allows newName to be used as am alias for ENCODING. ENCODING may be
762 either the name of an encoding or and encoding object (as above).
763
764 Currently I<newName> can be specified in the following ways:
765
766 =over 4
767
768 =item As a simple string.
769
770 =item As a qr// compiled regular expression, e.g.:
771
772   define_alias( qr/^iso8859-(\d+)$/i => '"iso-8859-$1"' );
773
774 In this case if I<ENCODING> is not a reference it is C<eval>-ed to
775 allow C<$1> etc. to be subsituted.  The example is one way to names as
776 used in X11 font names to alias the MIME names for the iso-8859-*
777 family.
778
779 =item As a code reference, e.g.:
780
781   define_alias( sub { return /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } , '');
782
783 In this case C<$_> will be set to the name that is being looked up and
784 I<ENCODING> is passed to the sub as its first argument.  The example
785 is another way to names as used in X11 font names to alias the MIME
786 names for the iso-8859-* family.
787
788 =back
789
790 =head2 Defining Encodings
791
792     use Encode qw(define_alias);
793     define_encoding( $object, 'canonicalName' [,alias...]);
794
795 Causes I<canonicalName> to be associated with I<$object>.  The object
796 should provide the interface described in L</"IMPLEMENTATION CLASSES">
797 below.  If more than two arguments are provided then additional
798 arguments are taken as aliases for I<$object> as for C<define_alias>.
799
800 =head1 Encoding and IO
801
802 It is very common to want to do encoding transformations when
803 reading or writing files, network connections, pipes etc.
804 If Perl is configured to use the new 'perlio' IO system then
805 C<Encode> provides a "layer" (See L<perliol>) which can transform
806 data as it is read or written.
807
808 Here is how the blind poet would modernise the encoding:
809
810     use Encode;
811     open(my $iliad,'<:encoding(iso-8859-7)','iliad.greek');
812     open(my $utf8,'>:utf8','iliad.utf8');
813     my @epic = <$iliad>;
814     print $utf8 @epic;
815     close($utf8);
816     close($illiad);
817
818 In addition the new IO system can also be configured to read/write
819 UTF-8 encoded characters (as noted above this is efficient):
820
821     open(my $fh,'>:utf8','anything');
822     print $fh "Any \x{0021} string \N{SMILEY FACE}\n";
823
824 Either of the above forms of "layer" specifications can be made the default
825 for a lexical scope with the C<use open ...> pragma. See L<open>.
826
827 Once a handle is open is layers can be altered using C<binmode>.
828
829 Without any such configuration, or if Perl itself is built using
830 system's own IO, then write operations assume that file handle accepts
831 only I<bytes> and will C<die> if a character larger than 255 is
832 written to the handle. When reading, each octet from the handle
833 becomes a byte-in-a-character. Note that this default is the same
834 behaviour as bytes-only languages (including Perl before v5.6) would
835 have, and is sufficient to handle native 8-bit encodings
836 e.g. iso-8859-1, EBCDIC etc. and any legacy mechanisms for handling
837 other encodings and binary data.
838
839 In other cases it is the programs responsibility to transform
840 characters into bytes using the API above before doing writes, and to
841 transform the bytes read from a handle into characters before doing
842 "character operations" (e.g. C<lc>, C</\W+/>, ...).
843
844 You can also use PerlIO to convert larger amounts of data you don't
845 want to bring into memory.  For example to convert between ISO 8859-1
846 (Latin 1) and UTF-8 (or UTF-EBCDIC in EBCDIC machines):
847
848     open(F, "<:encoding(iso-8859-1)", "data.txt") or die $!;
849     open(G, ">:utf8",                 "data.utf") or die $!;
850     while (<F>) { print G }
851
852     # Could also do "print G <F>" but that would pull
853     # the whole file into memory just to write it out again.
854
855 More examples:
856
857     open(my $f, "<:encoding(cp1252)")
858     open(my $g, ">:encoding(iso-8859-2)")
859     open(my $h, ">:encoding(latin9)")       # iso-8859-15
860
861 See L<PerlIO> for more information.
862
863 See also L<encoding> for how to change the default encoding of the
864 data in your script.
865
866 =head1 Encoding How to ...
867
868 To do:
869
870 =over 4
871
872 =item * IO with mixed content (faking iso-2020-*)
873
874 =item * MIME's Content-Length:
875
876 =item * UTF-8 strings in binary data.
877
878 =item * Perl/Encode wrappers on non-Unicode XS modules.
879
880 =back
881
882 =head1 Messing with Perl's Internals
883
884 The following API uses parts of Perl's internals in the current
885 implementation.  As such they are efficient, but may change.
886
887 =over 4
888
889 =item * is_utf8(STRING [, CHECK])
890
891 [INTERNAL] Test whether the UTF-8 flag is turned on in the STRING.
892 If CHECK is true, also checks the data in STRING for being well-formed
893 UTF-8.  Returns true if successful, false otherwise.
894
895 =item * valid_utf8(STRING)
896
897 [INTERNAL] Test whether STRING is in a consistent state.  Will return
898 true if string is held as bytes, or is well-formed UTF-8 and has the
899 UTF-8 flag on.  Main reason for this routine is to allow Perl's
900 testsuite to check that operations have left strings in a consistent
901 state.
902
903 =item *
904
905         _utf8_on(STRING)
906
907 [INTERNAL] Turn on the UTF-8 flag in STRING.  The data in STRING is
908 B<not> checked for being well-formed UTF-8.  Do not use unless you
909 B<know> that the STRING is well-formed UTF-8.  Returns the previous
910 state of the UTF-8 flag (so please don't test the return value as
911 I<not> success or failure), or C<undef> if STRING is not a string.
912
913 =item *
914
915         _utf8_off(STRING)
916
917 [INTERNAL] Turn off the UTF-8 flag in STRING.  Do not use frivolously.
918 Returns the previous state of the UTF-8 flag (so please don't test the
919 return value as I<not> success or failure), or C<undef> if STRING is
920 not a string.
921
922 =back
923
924 =head1 IMPLEMENTATION CLASSES
925
926 As mentioned above encodings are (in the current implementation at least)
927 defined by objects. The mapping of encoding name to object is via the
928 C<%encodings> hash.
929
930 The values of the hash can currently be either strings or objects.
931 The string form may go away in the future. The string form occurs
932 when C<encodings()> has scanned C<@INC> for loadable encodings but has
933 not actually loaded the encoding in question. This is because the
934 current "loading" process is all Perl and a bit slow.
935
936 Once an encoding is loaded then value of the hash is object which
937 implements the encoding. The object should provide the following
938 interface:
939
940 =over 4
941
942 =item -E<gt>name
943
944 Should return the string representing the canonical name of the encoding.
945
946 =item -E<gt>new_sequence
947
948 This is a placeholder for encodings with state. It should return an
949 object which implements this interface, all current implementations
950 return the original object.
951
952 =item -E<gt>encode($string,$check)
953
954 Should return the octet sequence representing I<$string>. If I<$check>
955 is true it should modify I<$string> in place to remove the converted
956 part (i.e.  the whole string unless there is an error).  If an error
957 occurs it should return the octet sequence for the fragment of string
958 that has been converted, and modify $string in-place to remove the
959 converted part leaving it starting with the problem fragment.
960
961 If check is is false then C<encode> should make a "best effort" to
962 convert the string - for example by using a replacement character.
963
964 =item -E<gt>decode($octets,$check)
965
966 Should return the string that I<$octets> represents. If I<$check> is
967 true it should modify I<$octets> in place to remove the converted part
968 (i.e.  the whole sequence unless there is an error).  If an error
969 occurs it should return the fragment of string that has been
970 converted, and modify $octets in-place to remove the converted part
971 leaving it starting with the problem fragment.
972
973 If check is is false then C<decode> should make a "best effort" to
974 convert the string - for example by using Unicode's "\x{FFFD}" as a
975 replacement character.
976
977 =back
978
979 It should be noted that the check behaviour is different from the
980 outer public API. The logic is that the "unchecked" case is useful
981 when encoding is part of a stream which may be reporting errors
982 (e.g. STDERR).  In such cases it is desirable to get everything
983 through somehow without causing additional errors which obscure the
984 original one. Also the encoding is best placed to know what the
985 correct replacement character is, so if that is the desired behaviour
986 then letting low level code do it is the most efficient.
987
988 In contrast if check is true, the scheme above allows the encoding to
989 do as much as it can and tell layer above how much that was. What is
990 lacking at present is a mechanism to report what went wrong. The most
991 likely interface will be an additional method call to the object, or
992 perhaps (to avoid forcing per-stream objects on otherwise stateless
993 encodings) and additional parameter.
994
995 It is also highly desirable that encoding classes inherit from
996 C<Encode::Encoding> as a base class. This allows that class to define
997 additional behaviour for all encoding objects. For example built in
998 Unicode, UCS-2 and UTF-8 classes use :
999
1000   package Encode::MyEncoding;
1001   use base qw(Encode::Encoding);
1002
1003   __PACKAGE__->Define(qw(myCanonical myAlias));
1004
1005 To create an object with bless {Name => ...},$class, and call
1006 define_encoding.  They inherit their C<name> method from
1007 C<Encode::Encoding>.
1008
1009 =head2 Compiled Encodings
1010
1011 F<Encode.xs> provides a class C<Encode::XS> which provides the
1012 interface described above. It calls a generic octet-sequence to
1013 octet-sequence "engine" that is driven by tables (defined in
1014 F<encengine.c>). The same engine is used for both encode and
1015 decode. C<Encode:XS>'s C<encode> forces Perl's characters to their
1016 UTF-8 form and then treats them as just another multibyte
1017 encoding. C<Encode:XS>'s C<decode> transforms the sequence and then
1018 turns the UTF-8-ness flag as that is the form that the tables are
1019 defined to produce. For details of the engine see the comments in
1020 F<encengine.c>.
1021
1022 The tables are produced by the Perl script F<compile> (the name needs
1023 to change so we can eventually install it somewhere). F<compile> can
1024 currently read two formats:
1025
1026 =over 4
1027
1028 =item *.enc
1029
1030 This is a coined format used by Tcl. It is documented in
1031 Encode/EncodeFormat.pod.
1032
1033 =item *.ucm
1034
1035 This is the semi-standard format used by IBM's ICU package.
1036
1037 =back
1038
1039 F<compile> can write the following forms:
1040
1041 =over 4
1042
1043 =item *.ucm
1044
1045 See above - the F<Encode/*.ucm> files provided with the distribution have
1046 been created from the original Tcl .enc files using this approach.
1047
1048 =item *.c
1049
1050 Produces tables as C data structures - this is used to build in encodings
1051 into F<Encode.so>/F<Encode.dll>.
1052
1053 =item *.xs
1054
1055 In theory this allows encodings to be stand-alone loadable Perl
1056 extensions.  The process has not yet been tested. The plan is to use
1057 this approach for large East Asian encodings.
1058
1059 =back
1060
1061 The set of encodings built-in to F<Encode.so>/F<Encode.dll> is
1062 determined by F<Makefile.PL>.  The current set is as follows:
1063
1064 =over 4
1065
1066 =item ascii and iso-8859-*
1067
1068 That is all the common 8-bit "western" encodings.
1069
1070 =item IBM-1047 and two other variants of EBCDIC.
1071
1072 These are the same variants that are supported by EBCDIC Perl as
1073 "native" encodings.  They are included to prove "reversibility" of
1074 some constructs in EBCDIC Perl.
1075
1076 =item symbol and dingbats as used by Tk on X11.
1077
1078 (The reason Encode got started was to support Perl/Tk.)
1079
1080 =back
1081
1082 That set is rather ad hoc and has been driven by the needs of the
1083 tests rather than the needs of typical applications. It is likely
1084 to be rationalized.
1085
1086 =head1 SEE ALSO
1087
1088 L<perlunicode>, L<perlebcdic>, L<perlfunc/open>, L<PerlIO>, L<encoding>
1089
1090 =cut
1091