This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate:
[perl5.git] / pod / perlunicode.pod
CommitLineData
393fec97
GS
1=head1 NAME
2
3perlunicode - Unicode support in Perl
4
5=head1 DESCRIPTION
6
0a1f2d14 7=head2 Important Caveats
21bad921 8
376d9008 9Unicode support is an extensive requirement. While Perl does not
c349b1b9
JH
10implement the Unicode standard or the accompanying technical reports
11from cover to cover, Perl does support many Unicode features.
21bad921 12
13a2d996 13=over 4
21bad921 14
fae2c0fb 15=item Input and Output Layers
21bad921 16
376d9008 17Perl knows when a filehandle uses Perl's internal Unicode encodings
1bfb14c4
JH
18(UTF-8, or UTF-EBCDIC if in EBCDIC) if the filehandle is opened with
19the ":utf8" layer. Other encodings can be converted to Perl's
20encoding on input or from Perl's encoding on output by use of the
21":encoding(...)" layer. See L<open>.
c349b1b9 22
376d9008 23To indicate that Perl source itself is using a particular encoding,
c349b1b9 24see L<encoding>.
21bad921
GS
25
26=item Regular Expressions
27
c349b1b9 28The regular expression compiler produces polymorphic opcodes. That is,
376d9008
JB
29the pattern adapts to the data and automatically switches to the Unicode
30character scheme when presented with Unicode data--or instead uses
31a traditional byte scheme when presented with byte data.
21bad921 32
ad0029c4 33=item C<use utf8> still needed to enable UTF-8/UTF-EBCDIC in scripts
21bad921 34
376d9008
JB
35As a compatibility measure, the C<use utf8> pragma must be explicitly
36included to enable recognition of UTF-8 in the Perl scripts themselves
1bfb14c4
JH
37(in string or regular expression literals, or in identifier names) on
38ASCII-based machines or to recognize UTF-EBCDIC on EBCDIC-based
376d9008 39machines. B<These are the only times when an explicit C<use utf8>
8f8cf39c 40is needed.> See L<utf8>.
21bad921 41
1768d7eb 42You can also use the C<encoding> pragma to change the default encoding
6ec9efec 43of the data in your script; see L<encoding>.
1768d7eb 44
92a78a40
JH
45=item BOM-marked scripts and UTF-16 scripts autodetected
46
47If a Perl script begins marked with the Unicode BOM (UTF-16LE, UTF16-BE,
48or UTF-8), or if the script looks like non-BOM-marked UTF-16 of either
49endianness, Perl will correctly read in the script as Unicode.
50(BOMless UTF-8 cannot be effectively recognized or differentiated from
51ISO 8859-1 or other eight-bit encodings.)
52
5646a3c5
NC
53=item C<use encoding> needed to upgrade non-Latin-1 byte strings
54
55By default, there is a fundamental asymmetry in Perl's unicode model:
56implicit upgrading from byte strings to Unicode strings assumes that
57they were encoded in I<ISO 8859-1 (Latin-1)>, but Unicode strings are
58downgraded with UTF-8 encoding. This happens because the first 256
59codepoints in Unicode happens to agree with Latin-1.
60
61If you wish to interpret byte strings as UTF-8 instead, use the
62C<encoding> pragma:
63
64 use encoding 'utf8';
65
66See L</"Byte and Character Semantics"> for more details.
67
21bad921
GS
68=back
69
376d9008 70=head2 Byte and Character Semantics
393fec97 71
376d9008 72Beginning with version 5.6, Perl uses logically-wide characters to
3e4dbfed 73represent strings internally.
393fec97 74
376d9008
JB
75In future, Perl-level operations will be expected to work with
76characters rather than bytes.
393fec97 77
376d9008 78However, as an interim compatibility measure, Perl aims to
75daf61c
JH
79provide a safe migration path from byte semantics to character
80semantics for programs. For operations where Perl can unambiguously
376d9008 81decide that the input data are characters, Perl switches to
75daf61c
JH
82character semantics. For operations where this determination cannot
83be made without additional information from the user, Perl decides in
376d9008 84favor of compatibility and chooses to use byte semantics.
8cbd9a7a
GS
85
86This behavior preserves compatibility with earlier versions of Perl,
376d9008
JB
87which allowed byte semantics in Perl operations only if
88none of the program's inputs were marked as being as source of Unicode
8cbd9a7a
GS
89character data. Such data may come from filehandles, from calls to
90external programs, from information provided by the system (such as %ENV),
21bad921 91or from literals and constants in the source text.
8cbd9a7a 92
376d9008
JB
93The C<bytes> pragma will always, regardless of platform, force byte
94semantics in a particular lexical scope. See L<bytes>.
8cbd9a7a
GS
95
96The C<utf8> pragma is primarily a compatibility device that enables
75daf61c 97recognition of UTF-(8|EBCDIC) in literals encountered by the parser.
376d9008
JB
98Note that this pragma is only required while Perl defaults to byte
99semantics; when character semantics become the default, this pragma
100may become a no-op. See L<utf8>.
101
102Unless explicitly stated, Perl operators use character semantics
103for Unicode data and byte semantics for non-Unicode data.
104The decision to use character semantics is made transparently. If
105input data comes from a Unicode source--for example, if a character
fae2c0fb 106encoding layer is added to a filehandle or a literal Unicode
376d9008
JB
107string constant appears in a program--character semantics apply.
108Otherwise, byte semantics are in effect. The C<bytes> pragma should
109be used to force byte semantics on Unicode data.
110
111If strings operating under byte semantics and strings with Unicode
5646a3c5
NC
112character data are concatenated, the new string will be created by
113decoding the byte strings as I<ISO 8859-1 (Latin-1)>, even if the
114old Unicode string used EBCDIC. This translation is done without
115regard to the system's native 8-bit encoding. To change this for
116systems with non-Latin-1 and non-EBCDIC native encodings, use the
117C<encoding> pragma. See L<encoding>.
7dedd01f 118
feda178f 119Under character semantics, many operations that formerly operated on
376d9008 120bytes now operate on characters. A character in Perl is
feda178f 121logically just a number ranging from 0 to 2**31 or so. Larger
376d9008
JB
122characters may encode into longer sequences of bytes internally, but
123this internal detail is mostly hidden for Perl code.
124See L<perluniintro> for more.
393fec97 125
376d9008 126=head2 Effects of Character Semantics
393fec97
GS
127
128Character semantics have the following effects:
129
130=over 4
131
132=item *
133
376d9008 134Strings--including hash keys--and regular expression patterns may
574c8022 135contain characters that have an ordinal value larger than 255.
393fec97 136
feda178f
JH
137If you use a Unicode editor to edit your program, Unicode characters
138may occur directly within the literal strings in one of the various
376d9008
JB
139Unicode encodings (UTF-8, UTF-EBCDIC, UCS-2, etc.), but will be recognized
140as such and converted to Perl's internal representation only if the
feda178f 141appropriate L<encoding> is specified.
3e4dbfed 142
1bfb14c4
JH
143Unicode characters can also be added to a string by using the
144C<\x{...}> notation. The Unicode code for the desired character, in
376d9008
JB
145hexadecimal, should be placed in the braces. For instance, a smiley
146face is C<\x{263A}>. This encoding scheme only works for characters
147with a code of 0x100 or above.
3e4dbfed
JF
148
149Additionally, if you
574c8022 150
3e4dbfed 151 use charnames ':full';
574c8022 152
1bfb14c4
JH
153you can use the C<\N{...}> notation and put the official Unicode
154character name within the braces, such as C<\N{WHITE SMILING FACE}>.
376d9008 155
393fec97
GS
156
157=item *
158
574c8022
JH
159If an appropriate L<encoding> is specified, identifiers within the
160Perl script may contain Unicode alphanumeric characters, including
376d9008
JB
161ideographs. Perl does not currently attempt to canonicalize variable
162names.
393fec97 163
393fec97
GS
164=item *
165
1bfb14c4
JH
166Regular expressions match characters instead of bytes. "." matches
167a character instead of a byte. The C<\C> pattern is provided to force
168a match a single byte--a C<char> in C, hence C<\C>.
393fec97 169
393fec97
GS
170=item *
171
172Character classes in regular expressions match characters instead of
376d9008 173bytes and match against the character properties specified in the
1bfb14c4 174Unicode properties database. C<\w> can be used to match a Japanese
75daf61c 175ideograph, for instance.
393fec97 176
c02ac257
NC
177(However, and as a limitation of the current implementation, using
178C<\w> or C<\W> I<inside> a C<[...]> character class will still match
179with byte semantics.)
180
393fec97
GS
181=item *
182
eb0cc9e3 183Named Unicode properties, scripts, and block ranges may be used like
376d9008
JB
184character classes via the C<\p{}> "matches property" construct and
185the C<\P{}> negation, "doesn't match property".
1bfb14c4
JH
186
187For instance, C<\p{Lu}> matches any character with the Unicode "Lu"
188(Letter, uppercase) property, while C<\p{M}> matches any character
189with an "M" (mark--accents and such) property. Brackets are not
190required for single letter properties, so C<\p{M}> is equivalent to
191C<\pM>. Many predefined properties are available, such as
192C<\p{Mirrored}> and C<\p{Tibetan}>.
4193bef7 193
cfc01aea 194The official Unicode script and block names have spaces and dashes as
376d9008 195separators, but for convenience you can use dashes, spaces, or
1bfb14c4
JH
196underbars, and case is unimportant. It is recommended, however, that
197for consistency you use the following naming: the official Unicode
198script, property, or block name (see below for the additional rules
199that apply to block names) with whitespace and dashes removed, and the
200words "uppercase-first-lowercase-rest". C<Latin-1 Supplement> thus
201becomes C<Latin1Supplement>.
4193bef7 202
376d9008
JB
203You can also use negation in both C<\p{}> and C<\P{}> by introducing a caret
204(^) between the first brace and the property name: C<\p{^Tamil}> is
eb0cc9e3 205equal to C<\P{Tamil}>.
4193bef7 206
7f20ea55
JH
207B<NOTE: the properties, scripts, and blocks listed here are as of
208Unicode 3.2.0, March 2002, or Perl 5.8.0, July 2002. Unicode 4.0.0
209came out in April 2003, and Perl 5.8.1 in September 2003.>
210
eb0cc9e3 211Here are the basic Unicode General Category properties, followed by their
338501c1 212long form. You can use either; C<\p{Lu}> and C<\p{UppercaseLetter}>,
376d9008 213for instance, are identical.
393fec97 214
d73e5302
JH
215 Short Long
216
217 L Letter
06255458 218 LC CasedLetter
eb0cc9e3
JH
219 Lu UppercaseLetter
220 Ll LowercaseLetter
221 Lt TitlecaseLetter
222 Lm ModifierLetter
223 Lo OtherLetter
d73e5302
JH
224
225 M Mark
eb0cc9e3
JH
226 Mn NonspacingMark
227 Mc SpacingMark
228 Me EnclosingMark
d73e5302
JH
229
230 N Number
eb0cc9e3
JH
231 Nd DecimalNumber
232 Nl LetterNumber
233 No OtherNumber
d73e5302
JH
234
235 P Punctuation
eb0cc9e3
JH
236 Pc ConnectorPunctuation
237 Pd DashPunctuation
238 Ps OpenPunctuation
239 Pe ClosePunctuation
240 Pi InitialPunctuation
d73e5302 241 (may behave like Ps or Pe depending on usage)
eb0cc9e3 242 Pf FinalPunctuation
d73e5302 243 (may behave like Ps or Pe depending on usage)
eb0cc9e3 244 Po OtherPunctuation
d73e5302
JH
245
246 S Symbol
eb0cc9e3
JH
247 Sm MathSymbol
248 Sc CurrencySymbol
249 Sk ModifierSymbol
250 So OtherSymbol
d73e5302
JH
251
252 Z Separator
eb0cc9e3
JH
253 Zs SpaceSeparator
254 Zl LineSeparator
255 Zp ParagraphSeparator
d73e5302
JH
256
257 C Other
e150c829
JH
258 Cc Control
259 Cf Format
eb0cc9e3
JH
260 Cs Surrogate (not usable)
261 Co PrivateUse
e150c829 262 Cn Unassigned
1ac13f9a 263
376d9008 264Single-letter properties match all characters in any of the
3e4dbfed 265two-letter sub-properties starting with the same letter.
06255458
JP
266C<LC> and C<L&> are special cases, which are aliases for the set of
267C<Ll>, C<Lu>, and C<Lt>.
32293815 268
eb0cc9e3 269Because Perl hides the need for the user to understand the internal
1bfb14c4
JH
270representation of Unicode characters, there is no need to implement
271the somewhat messy concept of surrogates. C<Cs> is therefore not
eb0cc9e3 272supported.
d73e5302 273
376d9008 274Because scripts differ in their directionality--Hebrew is
06255458
JP
275written right to left, for example--Unicode supplies these properties in
276the BidiClass class:
32293815 277
eb0cc9e3 278 Property Meaning
92e830a9 279
06255458
JP
280 L Left-to-Right
281 LRE Left-to-Right Embedding
282 LRO Left-to-Right Override
283 R Right-to-Left
284 AL Right-to-Left Arabic
285 RLE Right-to-Left Embedding
286 RLO Right-to-Left Override
287 PDF Pop Directional Format
288 EN European Number
289 ES European Number Separator
290 ET European Number Terminator
291 AN Arabic Number
292 CS Common Number Separator
293 NSM Non-Spacing Mark
294 BN Boundary Neutral
295 B Paragraph Separator
296 S Segment Separator
297 WS Whitespace
298 ON Other Neutrals
299
300For example, C<\p{BidiClass:R}> matches characters that are normally
eb0cc9e3
JH
301written right to left.
302
210b36aa
AMS
303=back
304
2796c109
JH
305=head2 Scripts
306
376d9008
JB
307The script names which can be used by C<\p{...}> and C<\P{...}>,
308such as in C<\p{Latin}> or C<\p{Cyrillic}>, are as follows:
2796c109 309
1ac13f9a 310 Arabic
e9ad1727 311 Armenian
1ac13f9a 312 Bengali
e9ad1727 313 Bopomofo
1d81abf3 314 Buhid
eb0cc9e3 315 CanadianAboriginal
e9ad1727
JH
316 Cherokee
317 Cyrillic
318 Deseret
319 Devanagari
320 Ethiopic
321 Georgian
322 Gothic
323 Greek
1ac13f9a 324 Gujarati
e9ad1727
JH
325 Gurmukhi
326 Han
327 Hangul
1d81abf3 328 Hanunoo
e9ad1727
JH
329 Hebrew
330 Hiragana
331 Inherited
1ac13f9a 332 Kannada
e9ad1727
JH
333 Katakana
334 Khmer
1ac13f9a 335 Lao
e9ad1727
JH
336 Latin
337 Malayalam
338 Mongolian
1ac13f9a 339 Myanmar
1ac13f9a 340 Ogham
eb0cc9e3 341 OldItalic
e9ad1727 342 Oriya
1ac13f9a 343 Runic
e9ad1727
JH
344 Sinhala
345 Syriac
1d81abf3
JH
346 Tagalog
347 Tagbanwa
e9ad1727
JH
348 Tamil
349 Telugu
350 Thaana
351 Thai
352 Tibetan
1ac13f9a 353 Yi
1ac13f9a 354
376d9008 355Extended property classes can supplement the basic
1ac13f9a
JH
356properties, defined by the F<PropList> Unicode database:
357
1d81abf3 358 ASCIIHexDigit
eb0cc9e3 359 BidiControl
1ac13f9a 360 Dash
1d81abf3 361 Deprecated
1ac13f9a
JH
362 Diacritic
363 Extender
1d81abf3 364 GraphemeLink
eb0cc9e3 365 HexDigit
e9ad1727
JH
366 Hyphen
367 Ideographic
1d81abf3
JH
368 IDSBinaryOperator
369 IDSTrinaryOperator
eb0cc9e3 370 JoinControl
1d81abf3 371 LogicalOrderException
eb0cc9e3
JH
372 NoncharacterCodePoint
373 OtherAlphabetic
1d81abf3
JH
374 OtherDefaultIgnorableCodePoint
375 OtherGraphemeExtend
eb0cc9e3
JH
376 OtherLowercase
377 OtherMath
378 OtherUppercase
379 QuotationMark
1d81abf3
JH
380 Radical
381 SoftDotted
382 TerminalPunctuation
383 UnifiedIdeograph
eb0cc9e3 384 WhiteSpace
1ac13f9a 385
376d9008 386and there are further derived properties:
1ac13f9a 387
eb0cc9e3
JH
388 Alphabetic Lu + Ll + Lt + Lm + Lo + OtherAlphabetic
389 Lowercase Ll + OtherLowercase
390 Uppercase Lu + OtherUppercase
391 Math Sm + OtherMath
1ac13f9a
JH
392
393 ID_Start Lu + Ll + Lt + Lm + Lo + Nl
394 ID_Continue ID_Start + Mn + Mc + Nd + Pc
395
396 Any Any character
66b79f27
RGS
397 Assigned Any non-Cn character (i.e. synonym for \P{Cn})
398 Unassigned Synonym for \p{Cn}
1ac13f9a 399 Common Any character (or unassigned code point)
e150c829 400 not explicitly assigned to a script
2796c109 401
1bfb14c4
JH
402For backward compatibility (with Perl 5.6), all properties mentioned
403so far may have C<Is> prepended to their name, so C<\P{IsLu}>, for
404example, is equal to C<\P{Lu}>.
eb0cc9e3 405
2796c109
JH
406=head2 Blocks
407
1bfb14c4
JH
408In addition to B<scripts>, Unicode also defines B<blocks> of
409characters. The difference between scripts and blocks is that the
410concept of scripts is closer to natural languages, while the concept
411of blocks is more of an artificial grouping based on groups of 256
376d9008 412Unicode characters. For example, the C<Latin> script contains letters
1bfb14c4 413from many blocks but does not contain all the characters from those
376d9008
JB
414blocks. It does not, for example, contain digits, because digits are
415shared across many scripts. Digits and similar groups, like
416punctuation, are in a category called C<Common>.
2796c109 417
cfc01aea
JF
418For more about scripts, see the UTR #24:
419
420 http://www.unicode.org/unicode/reports/tr24/
421
422For more about blocks, see:
423
424 http://www.unicode.org/Public/UNIDATA/Blocks.txt
2796c109 425
376d9008
JB
426Block names are given with the C<In> prefix. For example, the
427Katakana block is referenced via C<\p{InKatakana}>. The C<In>
7eabb34d 428prefix may be omitted if there is no naming conflict with a script
eb0cc9e3 429or any other property, but it is recommended that C<In> always be used
1bfb14c4 430for block tests to avoid confusion.
eb0cc9e3
JH
431
432These block names are supported:
433
1d81abf3
JH
434 InAlphabeticPresentationForms
435 InArabic
436 InArabicPresentationFormsA
437 InArabicPresentationFormsB
438 InArmenian
439 InArrows
440 InBasicLatin
441 InBengali
442 InBlockElements
443 InBopomofo
444 InBopomofoExtended
445 InBoxDrawing
446 InBraillePatterns
447 InBuhid
448 InByzantineMusicalSymbols
449 InCJKCompatibility
450 InCJKCompatibilityForms
451 InCJKCompatibilityIdeographs
452 InCJKCompatibilityIdeographsSupplement
453 InCJKRadicalsSupplement
454 InCJKSymbolsAndPunctuation
455 InCJKUnifiedIdeographs
456 InCJKUnifiedIdeographsExtensionA
457 InCJKUnifiedIdeographsExtensionB
458 InCherokee
459 InCombiningDiacriticalMarks
460 InCombiningDiacriticalMarksforSymbols
461 InCombiningHalfMarks
462 InControlPictures
463 InCurrencySymbols
464 InCyrillic
465 InCyrillicSupplementary
466 InDeseret
467 InDevanagari
468 InDingbats
469 InEnclosedAlphanumerics
470 InEnclosedCJKLettersAndMonths
471 InEthiopic
472 InGeneralPunctuation
473 InGeometricShapes
474 InGeorgian
475 InGothic
476 InGreekExtended
477 InGreekAndCoptic
478 InGujarati
479 InGurmukhi
480 InHalfwidthAndFullwidthForms
481 InHangulCompatibilityJamo
482 InHangulJamo
483 InHangulSyllables
484 InHanunoo
485 InHebrew
486 InHighPrivateUseSurrogates
487 InHighSurrogates
488 InHiragana
489 InIPAExtensions
490 InIdeographicDescriptionCharacters
491 InKanbun
492 InKangxiRadicals
493 InKannada
494 InKatakana
495 InKatakanaPhoneticExtensions
496 InKhmer
497 InLao
498 InLatin1Supplement
499 InLatinExtendedA
500 InLatinExtendedAdditional
501 InLatinExtendedB
502 InLetterlikeSymbols
503 InLowSurrogates
504 InMalayalam
505 InMathematicalAlphanumericSymbols
506 InMathematicalOperators
507 InMiscellaneousMathematicalSymbolsA
508 InMiscellaneousMathematicalSymbolsB
509 InMiscellaneousSymbols
510 InMiscellaneousTechnical
511 InMongolian
512 InMusicalSymbols
513 InMyanmar
514 InNumberForms
515 InOgham
516 InOldItalic
517 InOpticalCharacterRecognition
518 InOriya
519 InPrivateUseArea
520 InRunic
521 InSinhala
522 InSmallFormVariants
523 InSpacingModifierLetters
524 InSpecials
525 InSuperscriptsAndSubscripts
526 InSupplementalArrowsA
527 InSupplementalArrowsB
528 InSupplementalMathematicalOperators
529 InSupplementaryPrivateUseAreaA
530 InSupplementaryPrivateUseAreaB
531 InSyriac
532 InTagalog
533 InTagbanwa
534 InTags
535 InTamil
536 InTelugu
537 InThaana
538 InThai
539 InTibetan
540 InUnifiedCanadianAboriginalSyllabics
541 InVariationSelectors
542 InYiRadicals
543 InYiSyllables
32293815 544
210b36aa
AMS
545=over 4
546
393fec97
GS
547=item *
548
376d9008
JB
549The special pattern C<\X> matches any extended Unicode
550sequence--"a combining character sequence" in Standardese--where the
551first character is a base character and subsequent characters are mark
552characters that apply to the base character. C<\X> is equivalent to
393fec97
GS
553C<(?:\PM\pM*)>.
554
393fec97
GS
555=item *
556
383e7cdd 557The C<tr///> operator translates characters instead of bytes. Note
376d9008
JB
558that the C<tr///CU> functionality has been removed. For similar
559functionality see pack('U0', ...) and pack('C0', ...).
393fec97 560
393fec97
GS
561=item *
562
563Case translation operators use the Unicode case translation tables
376d9008
JB
564when character input is provided. Note that C<uc()>, or C<\U> in
565interpolated strings, translates to uppercase, while C<ucfirst>,
566or C<\u> in interpolated strings, translates to titlecase in languages
567that make the distinction.
393fec97
GS
568
569=item *
570
376d9008 571Most operators that deal with positions or lengths in a string will
75daf61c 572automatically switch to using character positions, including
be0b3d4b 573C<chop()>, C<chomp()>, C<substr()>, C<pos()>, C<index()>, C<rindex()>,
75daf61c 574C<sprintf()>, C<write()>, and C<length()>. Operators that
376d9008 575specifically do not switch include C<vec()>, C<pack()>, and
be0b3d4b 576C<unpack()>. Operators that really don't care include
376d9008
JB
577operators that treats strings as a bucket of bits such as C<sort()>,
578and operators dealing with filenames.
393fec97
GS
579
580=item *
581
1bfb14c4 582The C<pack()>/C<unpack()> letters C<c> and C<C> do I<not> change,
376d9008 583since they are often used for byte-oriented formats. Again, think
1bfb14c4
JH
584C<char> in the C language.
585
586There is a new C<U> specifier that converts between Unicode characters
587and code points.
393fec97
GS
588
589=item *
590
376d9008
JB
591The C<chr()> and C<ord()> functions work on characters, similar to
592C<pack("U")> and C<unpack("U")>, I<not> C<pack("C")> and
593C<unpack("C")>. C<pack("C")> and C<unpack("C")> are methods for
594emulating byte-oriented C<chr()> and C<ord()> on Unicode strings.
595While these methods reveal the internal encoding of Unicode strings,
596that is not something one normally needs to care about at all.
393fec97
GS
597
598=item *
599
376d9008
JB
600The bit string operators, C<& | ^ ~>, can operate on character data.
601However, for backward compatibility, such as when using bit string
602operations when characters are all less than 256 in ordinal value, one
603should not use C<~> (the bit complement) with characters of both
604values less than 256 and values greater than 256. Most importantly,
605DeMorgan's laws (C<~($x|$y) eq ~$x&~$y> and C<~($x&$y) eq ~$x|~$y>)
606will not hold. The reason for this mathematical I<faux pas> is that
607the complement cannot return B<both> the 8-bit (byte-wide) bit
608complement B<and> the full character-wide bit complement.
a1ca4561
YST
609
610=item *
611
983ffd37
JH
612lc(), uc(), lcfirst(), and ucfirst() work for the following cases:
613
614=over 8
615
616=item *
617
618the case mapping is from a single Unicode character to another
376d9008 619single Unicode character, or
983ffd37
JH
620
621=item *
622
623the case mapping is from a single Unicode character to more
376d9008 624than one Unicode character.
983ffd37
JH
625
626=back
627
5b7ea690
JH
628Things to do with locales (Lithuanian, Turkish, Azeri) do B<not> work
629since Perl does not understand the concept of Unicode locales.
983ffd37 630
5b7ea690 631See the Unicode Technical Report #21, Case Mappings, for more details.
983ffd37
JH
632
633=back
634
5b7ea690 635=over 4
ac1256e8
JH
636
637=item *
638
393fec97
GS
639And finally, C<scalar reverse()> reverses by character rather than by byte.
640
641=back
642
376d9008 643=head2 User-Defined Character Properties
491fd90a
JH
644
645You can define your own character properties by defining subroutines
cc38339d
NC
646whose names begin with "In" or "Is". The subroutines can be defined in
647any package. The user-defined properties can be used in the regular
648expression C<\p> and C<\P> constructs; if you are using a user-defined
649property from a package other than the one you are in, you must specify
650its package in the C<\p> or C<\P> construct.
651
652 # assuming property IsForeign defined in Lang::
653 package main; # property package name required
654 if ($txt =~ /\p{Lang::IsForeign}+/) { ... }
655
656 package Lang; # property package name not required
657 if ($txt =~ /\p{IsForeign}+/) { ... }
658
659
660Note that the effect is compile-time and immutable once defined.
491fd90a 661
376d9008
JB
662The subroutines must return a specially-formatted string, with one
663or more newline-separated lines. Each line must be one of the following:
491fd90a
JH
664
665=over 4
666
667=item *
668
99a6b1f0 669Two hexadecimal numbers separated by horizontal whitespace (space or
376d9008 670tabular characters) denoting a range of Unicode code points to include.
491fd90a
JH
671
672=item *
673
376d9008 674Something to include, prefixed by "+": a built-in character
cc38339d
NC
675property (prefixed by "utf8::") or a user-defined character property,
676to represent all the characters in that property; two hexadecimal code
677points for a range; or a single hexadecimal code point.
491fd90a
JH
678
679=item *
680
376d9008 681Something to exclude, prefixed by "-": an existing character
cc38339d
NC
682property (prefixed by "utf8::") or a user-defined character property,
683to represent all the characters in that property; two hexadecimal code
684points for a range; or a single hexadecimal code point.
491fd90a
JH
685
686=item *
687
376d9008 688Something to negate, prefixed "!": an existing character
cc38339d
NC
689property (prefixed by "utf8::") or a user-defined character property,
690to represent all the characters in that property; two hexadecimal code
691points for a range; or a single hexadecimal code point.
692
693=item *
694
695Something to intersect with, prefixed by "&": an existing character
696property (prefixed by "utf8::") or a user-defined character property,
697for all the characters except the characters in the property; two
698hexadecimal code points for a range; or a single hexadecimal code point.
491fd90a
JH
699
700=back
701
702For example, to define a property that covers both the Japanese
703syllabaries (hiragana and katakana), you can define
704
705 sub InKana {
d5822f25
A
706 return <<END;
707 3040\t309F
708 30A0\t30FF
491fd90a
JH
709 END
710 }
711
d5822f25
A
712Imagine that the here-doc end marker is at the beginning of the line.
713Now you can use C<\p{InKana}> and C<\P{InKana}>.
491fd90a
JH
714
715You could also have used the existing block property names:
716
717 sub InKana {
718 return <<'END';
719 +utf8::InHiragana
720 +utf8::InKatakana
721 END
722 }
723
724Suppose you wanted to match only the allocated characters,
d5822f25 725not the raw block ranges: in other words, you want to remove
491fd90a
JH
726the non-characters:
727
728 sub InKana {
729 return <<'END';
730 +utf8::InHiragana
731 +utf8::InKatakana
732 -utf8::IsCn
733 END
734 }
735
736The negation is useful for defining (surprise!) negated classes.
737
738 sub InNotKana {
739 return <<'END';
740 !utf8::InHiragana
741 -utf8::InKatakana
742 +utf8::IsCn
743 END
744 }
745
cc38339d
NC
746Intersection is useful for getting the common characters matched by
747two (or more) classes.
748
749 sub InFooAndBar {
750 return <<'END';
751 +main::Foo
752 &main::Bar
753 END
754 }
755
756It's important to remember not to use "&" for the first set -- that
757would be intersecting with nothing (resulting in an empty set).
758
a4e763d2
JH
759You can also define your own mappings to be used in the lc(),
760lcfirst(), uc(), and ucfirst() (or their string-inlined versions).
761The principle is the same: define subroutines in the C<main> package
762with names like C<ToLower> (for lc() and lcfirst()), C<ToTitle> (for
763the first character in ucfirst()), and C<ToUpper> (for uc(), and the
764rest of the characters in ucfirst()).
765
766The string returned by the subroutines needs now to be three
767hexadecimal numbers separated by tabulators: start of the source
768range, end of the source range, and start of the destination range.
769For example:
770
771 sub ToUpper {
772 return <<END;
773 0061\t0063\t0041
774 END
775 }
776
777defines an uc() mapping that causes only the characters "a", "b", and
778"c" to be mapped to "A", "B", "C", all other characters will remain
779unchanged.
780
781If there is no source range to speak of, that is, the mapping is from
782a single character to another single character, leave the end of the
783source range empty, but the two tabulator characters are still needed.
784For example:
785
786 sub ToLower {
787 return <<END;
788 0041\t\t0061
789 END
790 }
791
792defines a lc() mapping that causes only "A" to be mapped to "a", all
793other characters will remain unchanged.
794
795(For serious hackers only) If you want to introspect the default
796mappings, you can find the data in the directory
797C<$Config{privlib}>/F<unicore/To/>. The mapping data is returned as
798the here-document, and the C<utf8::ToSpecFoo> are special exception
799mappings derived from <$Config{privlib}>/F<unicore/SpecialCasing.txt>.
800The C<Digit> and C<Fold> mappings that one can see in the directory
801are not directly user-accessible, one can use either the
802C<Unicode::UCD> module, or just match case-insensitively (that's when
803the C<Fold> mapping is used).
804
805A final note on the user-defined property tests and mappings: they
806will be used only if the scalar has been marked as having Unicode
807characters. Old byte-style strings will not be affected.
808
376d9008 809=head2 Character Encodings for Input and Output
8cbd9a7a 810
7221edc9 811See L<Encode>.
8cbd9a7a 812
c29a771d 813=head2 Unicode Regular Expression Support Level
776f8809 814
376d9008
JB
815The following list of Unicode support for regular expressions describes
816all the features currently supported. The references to "Level N"
817and the section numbers refer to the Unicode Technical Report 18,
8f34e12f
JH
818"Unicode Regular Expression Guidelines", version 6 (Unicode 3.2.0,
819Perl 5.8.0).
776f8809
JH
820
821=over 4
822
823=item *
824
825Level 1 - Basic Unicode Support
826
827 2.1 Hex Notation - done [1]
3bfdc84c 828 Named Notation - done [2]
776f8809
JH
829 2.2 Categories - done [3][4]
830 2.3 Subtraction - MISSING [5][6]
831 2.4 Simple Word Boundaries - done [7]
78d3e1bf 832 2.5 Simple Loose Matches - done [8]
776f8809
JH
833 2.6 End of Line - MISSING [9][10]
834
835 [ 1] \x{...}
836 [ 2] \N{...}
eb0cc9e3 837 [ 3] . \p{...} \P{...}
06255458
JP
838 [ 4] support for scripts (see UTR#24 Script Names), blocks,
839 binary properties, enumerated non-binary properties, and
840 numeric properties (as listed in UTR#18 Other Properties)
776f8809 841 [ 5] have negation
237bad5b
JH
842 [ 6] can use regular expression look-ahead [a]
843 or user-defined character properties [b] to emulate subtraction
776f8809 844 [ 7] include Letters in word characters
376d9008 845 [ 8] note that Perl does Full case-folding in matching, not Simple:
5b7ea690 846 for example U+1F88 is equivalent with U+1F00 U+03B9,
e0f9d4a8 847 not with 1F80. This difference matters for certain Greek
376d9008
JB
848 capital letters with certain modifiers: the Full case-folding
849 decomposes the letter, while the Simple case-folding would map
e0f9d4a8 850 it to a single character.
18729d3e 851 [ 9] see UTR #13 Unicode Newline Guidelines
5b7ea690 852 [10] should do ^ and $ also on \x{85}, \x{2028} and \x{2029}
ec83e909 853 (should also affect <>, $., and script line numbers)
3bfdc84c 854 (the \x{85}, \x{2028} and \x{2029} do match \s)
7207e29d 855
237bad5b 856[a] You can mimic class subtraction using lookahead.
18729d3e 857For example, what UTR #18 might write as
29bdacb8 858
dbe420b4
JH
859 [{Greek}-[{UNASSIGNED}]]
860
861in Perl can be written as:
862
1d81abf3
JH
863 (?!\p{Unassigned})\p{InGreekAndCoptic}
864 (?=\p{Assigned})\p{InGreekAndCoptic}
dbe420b4
JH
865
866But in this particular example, you probably really want
867
1bfb14c4 868 \p{GreekAndCoptic}
dbe420b4
JH
869
870which will match assigned characters known to be part of the Greek script.
29bdacb8 871
18729d3e
JH
872Also see the Unicode::Regex::Set module, it does implement the full
873UTR #18 grouping, intersection, union, and removal (subtraction) syntax.
874
818c4caa 875[b] See L</"User-Defined Character Properties">.
237bad5b 876
776f8809
JH
877=item *
878
879Level 2 - Extended Unicode Support
880
5b7ea690
JH
881 3.1 Surrogates - MISSING [11]
882 3.2 Canonical Equivalents - MISSING [12][13]
883 3.3 Locale-Independent Graphemes - MISSING [14]
884 3.4 Locale-Independent Words - MISSING [15]
885 3.5 Locale-Independent Loose Matches - MISSING [16]
776f8809 886
5b7ea690
JH
887 [11] Surrogates are solely a UTF-16 concept and Perl's internal
888 representation is UTF-8. The Encode module does UTF-16, though.
889 [12] see UTR#15 Unicode Normalization
890 [13] have Unicode::Normalize but not integrated to regexes
891 [14] have \X but at this level . should equal that
892 [15] need three classes, not just \w and \W
893 [16] see UTR#21 Case Mappings
776f8809
JH
894
895=item *
896
897Level 3 - Locale-Sensitive Support
898
899 4.1 Locale-Dependent Categories - MISSING
900 4.2 Locale-Dependent Graphemes - MISSING [16][17]
901 4.3 Locale-Dependent Words - MISSING
902 4.4 Locale-Dependent Loose Matches - MISSING
903 4.5 Locale-Dependent Ranges - MISSING
904
905 [16] see UTR#10 Unicode Collation Algorithms
906 [17] have Unicode::Collate but not integrated to regexes
907
908=back
909
c349b1b9
JH
910=head2 Unicode Encodings
911
376d9008
JB
912Unicode characters are assigned to I<code points>, which are abstract
913numbers. To use these numbers, various encodings are needed.
c349b1b9
JH
914
915=over 4
916
c29a771d 917=item *
5cb3728c
RB
918
919UTF-8
c349b1b9 920
3e4dbfed 921UTF-8 is a variable-length (1 to 6 bytes, current character allocations
376d9008
JB
922require 4 bytes), byte-order independent encoding. For ASCII (and we
923really do mean 7-bit ASCII, not another 8-bit encoding), UTF-8 is
924transparent.
c349b1b9 925
8c007b5a 926The following table is from Unicode 3.2.
05632f9a
JH
927
928 Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
929
8c007b5a
JH
930 U+0000..U+007F 00..7F
931 U+0080..U+07FF C2..DF 80..BF
ec90690f
TS
932 U+0800..U+0FFF E0 A0..BF 80..BF
933 U+1000..U+CFFF E1..EC 80..BF 80..BF
934 U+D000..U+D7FF ED 80..9F 80..BF
8c007b5a 935 U+D800..U+DFFF ******* ill-formed *******
ec90690f 936 U+E000..U+FFFF EE..EF 80..BF 80..BF
05632f9a
JH
937 U+10000..U+3FFFF F0 90..BF 80..BF 80..BF
938 U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
939 U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
940
376d9008
JB
941Note the C<A0..BF> in C<U+0800..U+0FFF>, the C<80..9F> in
942C<U+D000...U+D7FF>, the C<90..B>F in C<U+10000..U+3FFFF>, and the
943C<80...8F> in C<U+100000..U+10FFFF>. The "gaps" are caused by legal
944UTF-8 avoiding non-shortest encodings: it is technically possible to
945UTF-8-encode a single code point in different ways, but that is
946explicitly forbidden, and the shortest possible encoding should always
947be used. So that's what Perl does.
37361303 948
376d9008 949Another way to look at it is via bits:
05632f9a
JH
950
951 Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
952
953 0aaaaaaa 0aaaaaaa
954 00000bbbbbaaaaaa 110bbbbb 10aaaaaa
955 ccccbbbbbbaaaaaa 1110cccc 10bbbbbb 10aaaaaa
956 00000dddccccccbbbbbbaaaaaa 11110ddd 10cccccc 10bbbbbb 10aaaaaa
957
958As you can see, the continuation bytes all begin with C<10>, and the
8c007b5a 959leading bits of the start byte tell how many bytes the are in the
05632f9a
JH
960encoded character.
961
c29a771d 962=item *
5cb3728c
RB
963
964UTF-EBCDIC
dbe420b4 965
376d9008 966Like UTF-8 but EBCDIC-safe, in the way that UTF-8 is ASCII-safe.
dbe420b4 967
c29a771d 968=item *
5cb3728c 969
cd458e05 970UTF-16, UTF-16BE, UTF-16LE, Surrogates, and BOMs (Byte Order Marks)
c349b1b9 971
1bfb14c4
JH
972The followings items are mostly for reference and general Unicode
973knowledge, Perl doesn't use these constructs internally.
dbe420b4 974
c349b1b9 975UTF-16 is a 2 or 4 byte encoding. The Unicode code points
1bfb14c4
JH
976C<U+0000..U+FFFF> are stored in a single 16-bit unit, and the code
977points C<U+10000..U+10FFFF> in two 16-bit units. The latter case is
c349b1b9
JH
978using I<surrogates>, the first 16-bit unit being the I<high
979surrogate>, and the second being the I<low surrogate>.
980
376d9008 981Surrogates are code points set aside to encode the C<U+10000..U+10FFFF>
c349b1b9 982range of Unicode code points in pairs of 16-bit units. The I<high
376d9008
JB
983surrogates> are the range C<U+D800..U+DBFF>, and the I<low surrogates>
984are the range C<U+DC00..U+DFFF>. The surrogate encoding is
c349b1b9
JH
985
986 $hi = ($uni - 0x10000) / 0x400 + 0xD800;
987 $lo = ($uni - 0x10000) % 0x400 + 0xDC00;
988
989and the decoding is
990
1a3fa709 991 $uni = 0x10000 + ($hi - 0xD800) * 0x400 + ($lo - 0xDC00);
c349b1b9 992
feda178f 993If you try to generate surrogates (for example by using chr()), you
376d9008
JB
994will get a warning if warnings are turned on, because those code
995points are not valid for a Unicode character.
9466bab6 996
376d9008 997Because of the 16-bitness, UTF-16 is byte-order dependent. UTF-16
c349b1b9 998itself can be used for in-memory computations, but if storage or
376d9008
JB
999transfer is required either UTF-16BE (big-endian) or UTF-16LE
1000(little-endian) encodings must be chosen.
c349b1b9
JH
1001
1002This introduces another problem: what if you just know that your data
376d9008
JB
1003is UTF-16, but you don't know which endianness? Byte Order Marks, or
1004BOMs, are a solution to this. A special character has been reserved
86bbd6d1 1005in Unicode to function as a byte order marker: the character with the
376d9008 1006code point C<U+FEFF> is the BOM.
042da322 1007
c349b1b9 1008The trick is that if you read a BOM, you will know the byte order,
376d9008
JB
1009since if it was written on a big-endian platform, you will read the
1010bytes C<0xFE 0xFF>, but if it was written on a little-endian platform,
1011you will read the bytes C<0xFF 0xFE>. (And if the originating platform
1012was writing in UTF-8, you will read the bytes C<0xEF 0xBB 0xBF>.)
042da322 1013
86bbd6d1 1014The way this trick works is that the character with the code point
376d9008
JB
1015C<U+FFFE> is guaranteed not to be a valid Unicode character, so the
1016sequence of bytes C<0xFF 0xFE> is unambiguously "BOM, represented in
1bfb14c4 1017little-endian format" and cannot be C<U+FFFE>, represented in big-endian
042da322 1018format".
c349b1b9 1019
c29a771d 1020=item *
5cb3728c 1021
cd458e05 1022UTF-32, UTF-32BE, UTF-32LE
c349b1b9
JH
1023
1024The UTF-32 family is pretty much like the UTF-16 family, expect that
042da322 1025the units are 32-bit, and therefore the surrogate scheme is not
376d9008
JB
1026needed. The BOM signatures will be C<0x00 0x00 0xFE 0xFF> for BE and
1027C<0xFF 0xFE 0x00 0x00> for LE.
c349b1b9 1028
c29a771d 1029=item *
5cb3728c
RB
1030
1031UCS-2, UCS-4
c349b1b9 1032
86bbd6d1 1033Encodings defined by the ISO 10646 standard. UCS-2 is a 16-bit
376d9008 1034encoding. Unlike UTF-16, UCS-2 is not extensible beyond C<U+FFFF>,
339cfa0e
JH
1035because it does not use surrogates. UCS-4 is a 32-bit encoding,
1036functionally identical to UTF-32.
c349b1b9 1037
c29a771d 1038=item *
5cb3728c
RB
1039
1040UTF-7
c349b1b9 1041
376d9008
JB
1042A seven-bit safe (non-eight-bit) encoding, which is useful if the
1043transport or storage is not eight-bit safe. Defined by RFC 2152.
c349b1b9 1044
95a1a48b
JH
1045=back
1046
0d7c09bb
JH
1047=head2 Security Implications of Unicode
1048
1049=over 4
1050
1051=item *
1052
1053Malformed UTF-8
bf0fa0b2
JH
1054
1055Unfortunately, the specification of UTF-8 leaves some room for
1056interpretation of how many bytes of encoded output one should generate
376d9008
JB
1057from one input Unicode character. Strictly speaking, the shortest
1058possible sequence of UTF-8 bytes should be generated,
1059because otherwise there is potential for an input buffer overflow at
feda178f 1060the receiving end of a UTF-8 connection. Perl always generates the
376d9008
JB
1061shortest length UTF-8, and with warnings on Perl will warn about
1062non-shortest length UTF-8 along with other malformations, such as the
1063surrogates, which are not real Unicode code points.
bf0fa0b2 1064
0d7c09bb
JH
1065=item *
1066
1067Regular expressions behave slightly differently between byte data and
376d9008
JB
1068character (Unicode) data. For example, the "word character" character
1069class C<\w> will work differently depending on if data is eight-bit bytes
1070or Unicode.
0d7c09bb 1071
376d9008
JB
1072In the first case, the set of C<\w> characters is either small--the
1073default set of alphabetic characters, digits, and the "_"--or, if you
0d7c09bb
JH
1074are using a locale (see L<perllocale>), the C<\w> might contain a few
1075more letters according to your language and country.
1076
376d9008 1077In the second case, the C<\w> set of characters is much, much larger.
1bfb14c4
JH
1078Most importantly, even in the set of the first 256 characters, it will
1079probably match different characters: unlike most locales, which are
1080specific to a language and country pair, Unicode classifies all the
1081characters that are letters I<somewhere> as C<\w>. For example, your
1082locale might not think that LATIN SMALL LETTER ETH is a letter (unless
1083you happen to speak Icelandic), but Unicode does.
0d7c09bb 1084
376d9008 1085As discussed elsewhere, Perl has one foot (two hooves?) planted in
1bfb14c4
JH
1086each of two worlds: the old world of bytes and the new world of
1087characters, upgrading from bytes to characters when necessary.
376d9008
JB
1088If your legacy code does not explicitly use Unicode, no automatic
1089switch-over to characters should happen. Characters shouldn't get
1bfb14c4
JH
1090downgraded to bytes, either. It is possible to accidentally mix bytes
1091and characters, however (see L<perluniintro>), in which case C<\w> in
1092regular expressions might start behaving differently. Review your
1093code. Use warnings and the C<strict> pragma.
0d7c09bb
JH
1094
1095=back
1096
c349b1b9
JH
1097=head2 Unicode in Perl on EBCDIC
1098
376d9008
JB
1099The way Unicode is handled on EBCDIC platforms is still
1100experimental. On such platforms, references to UTF-8 encoding in this
1101document and elsewhere should be read as meaning the UTF-EBCDIC
1102specified in Unicode Technical Report 16, unless ASCII vs. EBCDIC issues
c349b1b9 1103are specifically discussed. There is no C<utfebcdic> pragma or
376d9008 1104":utfebcdic" layer; rather, "utf8" and ":utf8" are reused to mean
86bbd6d1
PN
1105the platform's "natural" 8-bit encoding of Unicode. See L<perlebcdic>
1106for more discussion of the issues.
c349b1b9 1107
b310b053
JH
1108=head2 Locales
1109
4616122b 1110Usually locale settings and Unicode do not affect each other, but
b310b053
JH
1111there are a couple of exceptions:
1112
1113=over 4
1114
1115=item *
1116
f8bb70a6
JH
1117You can enable automatic UTF-8-ification of your standard file
1118handles, default C<open()> layer, and C<@ARGV> by using either
1119the C<-C> command line switch or the C<PERL_UNICODE> environment
1120variable, see L<perlrun> for the documentation of the C<-C> switch.
b310b053
JH
1121
1122=item *
1123
376d9008
JB
1124Perl tries really hard to work both with Unicode and the old
1125byte-oriented world. Most often this is nice, but sometimes Perl's
1126straddling of the proverbial fence causes problems.
b310b053
JH
1127
1128=back
1129
f3479639
JH
1130=head2 When Unicode Does Not Happen
1131
1132While Perl does have extensive ways to input and output in Unicode,
1133and few other 'entry points' like the @ARGV which can be interpreted
1134as Unicode (UTF-8), there still are many places where Unicode (in some
1135encoding or another) could be given as arguments or received as
1136results, or both, but it is not.
1137
17e60d2d
JH
1138The following are such interfaces. For all of these interfaces Perl
1139currently (as of 5.8.3) simply assumes byte strings both as arguments
1140and results, or UTF-8 strings if the C<encoding> pragma has been used.
f3479639
JH
1141
1142One reason why Perl does not attempt to resolve the role of Unicode in
1143this cases is that the answers are highly dependent on the operating
1144system and the file system(s). For example, whether filenames can be
1145in Unicode, and in exactly what kind of encoding, is not exactly a
1146portable concept. Similarly for the qx and system: how well will the
1147'command line interface' (and which of them?) handle Unicode?
1148
1149=over 4
1150
406c4b1e
JH
1151=item *
1152
de7b736d 1153chdir, chmod, chown, chroot, exec, link, lstat, mkdir,
916af9ea 1154rename, rmdir, stat, symlink, truncate, unlink, utime, -X
406c4b1e
JH
1155
1156=item *
1157
1158%ENV
1159
1160=item *
1161
1162glob (aka the <*>)
1163
1164=item *
f3479639 1165
406c4b1e 1166open, opendir, sysopen
f3479639 1167
406c4b1e 1168=item *
f3479639 1169
406c4b1e 1170qx (aka the backtick operator), system
f3479639 1171
406c4b1e 1172=item *
f3479639 1173
406c4b1e 1174readdir, readlink
f3479639
JH
1175
1176=back
1177
1178=head2 Forcing Unicode in Perl (Or Unforcing Unicode in Perl)
1179
1180Sometimes (see L</"When Unicode Does Not Happen">) there are
1181situations where you simply need to force Perl to believe that a byte
1182string is UTF-8, or vice versa. The low-level calls
1183utf8::upgrade($bytestring) and utf8::downgrade($utf8string) are
1184the answers.
1185
1186Do not use them without careful thought, though: Perl may easily get
1187very confused, angry, or even crash, if you suddenly change the 'nature'
1188of scalar like that. Especially careful you have to be if you use the
1189utf8::upgrade(): any random byte string is not valid UTF-8.
1190
95a1a48b
JH
1191=head2 Using Unicode in XS
1192
7801ec30
JH
1193If you want to handle Perl Unicode in XS extensions, you may find the
1194following C APIs useful. See also L<perlguts/"Unicode Support"> for an
1195explanation about Unicode at the XS level, and L<perlapi> for the API
1196details.
95a1a48b
JH
1197
1198=over 4
1199
1200=item *
1201
1bfb14c4
JH
1202C<DO_UTF8(sv)> returns true if the C<UTF8> flag is on and the bytes
1203pragma is not in effect. C<SvUTF8(sv)> returns true is the C<UTF8>
1204flag is on; the bytes pragma is ignored. The C<UTF8> flag being on
1205does B<not> mean that there are any characters of code points greater
1206than 255 (or 127) in the scalar or that there are even any characters
1207in the scalar. What the C<UTF8> flag means is that the sequence of
1208octets in the representation of the scalar is the sequence of UTF-8
1209encoded code points of the characters of a string. The C<UTF8> flag
1210being off means that each octet in this representation encodes a
1211single character with code point 0..255 within the string. Perl's
1212Unicode model is not to use UTF-8 until it is absolutely necessary.
95a1a48b
JH
1213
1214=item *
1215
ef7b71f0 1216C<uvuni_to_utf8(buf, chr)> writes a Unicode character code point into
1bfb14c4 1217a buffer encoding the code point as UTF-8, and returns a pointer
95a1a48b
JH
1218pointing after the UTF-8 bytes.
1219
1220=item *
1221
376d9008
JB
1222C<utf8_to_uvuni(buf, lenp)> reads UTF-8 encoded bytes from a buffer and
1223returns the Unicode character code point and, optionally, the length of
1224the UTF-8 byte sequence.
95a1a48b
JH
1225
1226=item *
1227
376d9008
JB
1228C<utf8_length(start, end)> returns the length of the UTF-8 encoded buffer
1229in characters. C<sv_len_utf8(sv)> returns the length of the UTF-8 encoded
95a1a48b
JH
1230scalar.
1231
1232=item *
1233
376d9008
JB
1234C<sv_utf8_upgrade(sv)> converts the string of the scalar to its UTF-8
1235encoded form. C<sv_utf8_downgrade(sv)> does the opposite, if
1236possible. C<sv_utf8_encode(sv)> is like sv_utf8_upgrade except that
1237it does not set the C<UTF8> flag. C<sv_utf8_decode()> does the
1238opposite of C<sv_utf8_encode()>. Note that none of these are to be
1239used as general-purpose encoding or decoding interfaces: C<use Encode>
1240for that. C<sv_utf8_upgrade()> is affected by the encoding pragma
1241but C<sv_utf8_downgrade()> is not (since the encoding pragma is
1242designed to be a one-way street).
95a1a48b
JH
1243
1244=item *
1245
376d9008 1246C<is_utf8_char(s)> returns true if the pointer points to a valid UTF-8
90f968e0 1247character.
95a1a48b
JH
1248
1249=item *
1250
376d9008 1251C<is_utf8_string(buf, len)> returns true if C<len> bytes of the buffer
95a1a48b
JH
1252are valid UTF-8.
1253
1254=item *
1255
376d9008
JB
1256C<UTF8SKIP(buf)> will return the number of bytes in the UTF-8 encoded
1257character in the buffer. C<UNISKIP(chr)> will return the number of bytes
1258required to UTF-8-encode the Unicode character code point. C<UTF8SKIP()>
90f968e0 1259is useful for example for iterating over the characters of a UTF-8
376d9008 1260encoded buffer; C<UNISKIP()> is useful, for example, in computing
90f968e0 1261the size required for a UTF-8 encoded buffer.
95a1a48b
JH
1262
1263=item *
1264
376d9008 1265C<utf8_distance(a, b)> will tell the distance in characters between the
95a1a48b
JH
1266two pointers pointing to the same UTF-8 encoded buffer.
1267
1268=item *
1269
376d9008
JB
1270C<utf8_hop(s, off)> will return a pointer to an UTF-8 encoded buffer
1271that is C<off> (positive or negative) Unicode characters displaced
1272from the UTF-8 buffer C<s>. Be careful not to overstep the buffer:
1273C<utf8_hop()> will merrily run off the end or the beginning of the
1274buffer if told to do so.
95a1a48b 1275
d2cc3551
JH
1276=item *
1277
376d9008
JB
1278C<pv_uni_display(dsv, spv, len, pvlim, flags)> and
1279C<sv_uni_display(dsv, ssv, pvlim, flags)> are useful for debugging the
1280output of Unicode strings and scalars. By default they are useful
1281only for debugging--they display B<all> characters as hexadecimal code
1bfb14c4
JH
1282points--but with the flags C<UNI_DISPLAY_ISPRINT>,
1283C<UNI_DISPLAY_BACKSLASH>, and C<UNI_DISPLAY_QQ> you can make the
1284output more readable.
d2cc3551
JH
1285
1286=item *
1287
376d9008
JB
1288C<ibcmp_utf8(s1, pe1, u1, l1, u1, s2, pe2, l2, u2)> can be used to
1289compare two strings case-insensitively in Unicode. For case-sensitive
1290comparisons you can just use C<memEQ()> and C<memNE()> as usual.
d2cc3551 1291
c349b1b9
JH
1292=back
1293
95a1a48b
JH
1294For more information, see L<perlapi>, and F<utf8.c> and F<utf8.h>
1295in the Perl source code distribution.
1296
c29a771d
JH
1297=head1 BUGS
1298
376d9008 1299=head2 Interaction with Locales
7eabb34d 1300
376d9008
JB
1301Use of locales with Unicode data may lead to odd results. Currently,
1302Perl attempts to attach 8-bit locale info to characters in the range
13030..255, but this technique is demonstrably incorrect for locales that
1304use characters above that range when mapped into Unicode. Perl's
1305Unicode support will also tend to run slower. Use of locales with
1306Unicode is discouraged.
c29a771d 1307
376d9008 1308=head2 Interaction with Extensions
7eabb34d 1309
376d9008 1310When Perl exchanges data with an extension, the extension should be
7eabb34d 1311able to understand the UTF-8 flag and act accordingly. If the
376d9008
JB
1312extension doesn't know about the flag, it's likely that the extension
1313will return incorrectly-flagged data.
7eabb34d
A
1314
1315So if you're working with Unicode data, consult the documentation of
1316every module you're using if there are any issues with Unicode data
1317exchange. If the documentation does not talk about Unicode at all,
a73d23f6 1318suspect the worst and probably look at the source to learn how the
376d9008 1319module is implemented. Modules written completely in Perl shouldn't
a73d23f6
RGS
1320cause problems. Modules that directly or indirectly access code written
1321in other programming languages are at risk.
7eabb34d 1322
376d9008 1323For affected functions, the simple strategy to avoid data corruption is
7eabb34d 1324to always make the encoding of the exchanged data explicit. Choose an
376d9008 1325encoding that you know the extension can handle. Convert arguments passed
7eabb34d
A
1326to the extensions to that encoding and convert results back from that
1327encoding. Write wrapper functions that do the conversions for you, so
1328you can later change the functions when the extension catches up.
1329
376d9008 1330To provide an example, let's say the popular Foo::Bar::escape_html
7eabb34d
A
1331function doesn't deal with Unicode data yet. The wrapper function
1332would convert the argument to raw UTF-8 and convert the result back to
376d9008 1333Perl's internal representation like so:
7eabb34d
A
1334
1335 sub my_escape_html ($) {
1336 my($what) = shift;
1337 return unless defined $what;
1338 Encode::decode_utf8(Foo::Bar::escape_html(Encode::encode_utf8($what)));
1339 }
1340
1341Sometimes, when the extension does not convert data but just stores
1342and retrieves them, you will be in a position to use the otherwise
1343dangerous Encode::_utf8_on() function. Let's say the popular
66b79f27 1344C<Foo::Bar> extension, written in C, provides a C<param> method that
7eabb34d
A
1345lets you store and retrieve data according to these prototypes:
1346
1347 $self->param($name, $value); # set a scalar
1348 $value = $self->param($name); # retrieve a scalar
1349
1350If it does not yet provide support for any encoding, one could write a
1351derived class with such a C<param> method:
1352
1353 sub param {
1354 my($self,$name,$value) = @_;
1355 utf8::upgrade($name); # make sure it is UTF-8 encoded
1356 if (defined $value)
1357 utf8::upgrade($value); # make sure it is UTF-8 encoded
1358 return $self->SUPER::param($name,$value);
1359 } else {
1360 my $ret = $self->SUPER::param($name);
1361 Encode::_utf8_on($ret); # we know, it is UTF-8 encoded
1362 return $ret;
1363 }
1364 }
1365
a73d23f6
RGS
1366Some extensions provide filters on data entry/exit points, such as
1367DB_File::filter_store_key and family. Look out for such filters in
66b79f27 1368the documentation of your extensions, they can make the transition to
7eabb34d
A
1369Unicode data much easier.
1370
376d9008 1371=head2 Speed
7eabb34d 1372
c29a771d 1373Some functions are slower when working on UTF-8 encoded strings than
574c8022 1374on byte encoded strings. All functions that need to hop over
f3479639
JH
1375characters such as length(), substr() or index(), or matching regular
1376expressions can work B<much> faster when the underlying data are
1377byte-encoded.
1378
1379In Perl 5.8.0 the slowness was often quite spectacular; in Perl 5.8.1
1380a caching scheme was introduced which will hopefully make the slowness
00abd843
IZ
1381somewhat less spectacular, at least for some operations. In general,
1382operations with UTF-8 encoded strings are still slower. As an example,
1383the Unicode properties (character classes) like C<\p{Nd}> are known to
1384be quite a bit slower (5-20 times) than their simpler counterparts
1385like C<\d> (then again, there 268 Unicode characters matching C<Nd>
1386compared with the 10 ASCII characters matching C<d>).
666f95b9 1387
5b7ea690
JH
1388=head2 Porting code from perl-5.6.X
1389
1390Perl 5.8 has a different Unicode model from 5.6. In 5.6 the programmer
1391was required to use the C<utf8> pragma to declare that a given scope
1392expected to deal with Unicode data and had to make sure that only
1393Unicode data were reaching that scope. If you have code that is
1394working with 5.6, you will need some of the following adjustments to
1395your code. The examples are written such that the code will continue
1396to work under 5.6, so you should be safe to try them out.
1397
1398=over 4
1399
1400=item *
1401
1402A filehandle that should read or write UTF-8
1403
1404 if ($] > 5.007) {
1405 binmode $fh, ":utf8";
1406 }
1407
1408=item *
1409
1410A scalar that is going to be passed to some extension
1411
1412Be it Compress::Zlib, Apache::Request or any extension that has no
1413mention of Unicode in the manpage, you need to make sure that the
1414UTF-8 flag is stripped off. Note that at the time of this writing
1415(October 2002) the mentioned modules are not UTF-8-aware. Please
1416check the documentation to verify if this is still true.
1417
1418 if ($] > 5.007) {
1419 require Encode;
1420 $val = Encode::encode_utf8($val); # make octets
1421 }
1422
1423=item *
1424
1425A scalar we got back from an extension
1426
1427If you believe the scalar comes back as UTF-8, you will most likely
1428want the UTF-8 flag restored:
1429
1430 if ($] > 5.007) {
1431 require Encode;
1432 $val = Encode::decode_utf8($val);
1433 }
1434
1435=item *
1436
1437Same thing, if you are really sure it is UTF-8
1438
1439 if ($] > 5.007) {
1440 require Encode;
1441 Encode::_utf8_on($val);
1442 }
1443
1444=item *
1445
1446A wrapper for fetchrow_array and fetchrow_hashref
1447
1448When the database contains only UTF-8, a wrapper function or method is
1449a convenient way to replace all your fetchrow_array and
1450fetchrow_hashref calls. A wrapper function will also make it easier to
1451adapt to future enhancements in your database driver. Note that at the
1452time of this writing (October 2002), the DBI has no standardized way
1453to deal with UTF-8 data. Please check the documentation to verify if
1454that is still true.
1455
1456 sub fetchrow {
1457 my($self, $sth, $what) = @_; # $what is one of fetchrow_{array,hashref}
1458 if ($] < 5.007) {
1459 return $sth->$what;
1460 } else {
1461 require Encode;
1462 if (wantarray) {
1463 my @arr = $sth->$what;
1464 for (@arr) {
1465 defined && /[^\000-\177]/ && Encode::_utf8_on($_);
1466 }
1467 return @arr;
1468 } else {
1469 my $ret = $sth->$what;
1470 if (ref $ret) {
1471 for my $k (keys %$ret) {
1472 defined && /[^\000-\177]/ && Encode::_utf8_on($_) for $ret->{$k};
1473 }
1474 return $ret;
1475 } else {
1476 defined && /[^\000-\177]/ && Encode::_utf8_on($_) for $ret;
1477 return $ret;
1478 }
1479 }
1480 }
1481 }
1482
1483
1484=item *
1485
1486A large scalar that you know can only contain ASCII
1487
1488Scalars that contain only ASCII and are marked as UTF-8 are sometimes
1489a drag to your program. If you recognize such a situation, just remove
1490the UTF-8 flag:
1491
1492 utf8::downgrade($val) if $] > 5.007;
1493
1494=back
1495
393fec97
GS
1496=head1 SEE ALSO
1497
72ff2908 1498L<perluniintro>, L<encoding>, L<Encode>, L<open>, L<utf8>, L<bytes>,
f8bb70a6 1499L<perlretut>, L<perlvar/"${^UNICODE}">
393fec97
GS
1500
1501=cut