GRAYBYTE WORDPRESS FILE MANAGER9850

Server IP : 68.65.123.43 / Your IP : 216.73.216.162
System : Linux server266.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64
PHP Version : 8.0.30
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /usr/share/perl5/pod/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /usr/share/perl5/pod//perlunitut.pod
=head1 NAME

perlunitut - Perl Unicode Tutorial

=head1 DESCRIPTION

The days of just flinging strings around are over. It's well established that
modern programs need to be capable of communicating funny accented letters, and
things like euro symbols. This means that programmers need new habits. It's
easy to program Unicode capable software, but it does require discipline to do
it right.

There's a lot to know about character sets, and text encodings. It's probably
best to spend a full day learning all this, but the basics can be learned in
minutes. 

These are not the very basics, though. It is assumed that you already
know the difference between bytes and characters, and realise (and accept!)
that there are many different character sets and encodings, and that your
program has to be explicit about them. Recommended reading is "The Absolute
Minimum Every Software Developer Absolutely, Positively Must Know About Unicode
and Character Sets (No Excuses!)" by Joel Spolsky, at
L<http://joelonsoftware.com/articles/Unicode.html>.

This tutorial speaks in rather absolute terms, and provides only a limited view
of the wealth of character string related features that Perl has to offer. For
most projects, this information will probably suffice.

=head2 Definitions

It's important to set a few things straight first. This is the most important
part of this tutorial. This view may conflict with other information that you
may have found on the web, but that's mostly because many sources are wrong.

You may have to re-read this entire section a few times...

=head3 Unicode

B<Unicode> is a character set with room for lots of characters. The ordinal
value of a character is called a B<code point>.   (But in practice, the
distinction between code point and character is blurred, so the terms often
are used interchangeably.)

There are many, many code points, but computers work with bytes, and a byte has
room for only 256 values.  Unicode has many more characters than that,
so you need a method to make these accessible.

Unicode is encoded using several competing encodings, of which UTF-8 is the
most used. In a Unicode encoding, multiple subsequent bytes can be used to
store a single code point, or simply: character.

=head3 UTF-8

B<UTF-8> is a Unicode encoding. Many people think that Unicode and UTF-8 are
the same thing, but they're not. There are more Unicode encodings, but much of
the world has standardized on UTF-8. 

UTF-8 treats the first 128 codepoints, 0..127, the same as ASCII. They take
only one byte per character. All other characters are encoded as two to
four bytes using a complex scheme. Fortunately, Perl handles this for
us, so we don't have to worry about this.

=head3 Text strings (character strings)

B<Text strings>, or B<character strings> are made of characters. Bytes are
irrelevant here, and so are encodings. Each character is just that: the
character.

On a text string, you would do things like:

    $text =~ s/foo/bar/;
    if ($string =~ /^\d+$/) { ... }
    $text = ucfirst $text;
    my $character_count = length $text;

The value of a character (C<ord>, C<chr>) is the corresponding Unicode code
point.

=head3 Binary strings (byte strings)

B<Binary strings>, or B<byte strings> are made of bytes. Here, you don't have
characters, just bytes. All communication with the outside world (anything
outside of your current Perl process) is done in binary.

On a binary string, you would do things like:

    my (@length_content) = unpack "(V/a)*", $binary;
    $binary =~ s/\x00\x0F/\xFF\xF0/;  # for the brave :)
    print {$fh} $binary;
    my $byte_count = length $binary;

=head3 Encoding

B<Encoding> (as a verb) is the conversion from I<text> to I<binary>. To encode,
you have to supply the target encoding, for example C<iso-8859-1> or C<UTF-8>.
Some encodings, like the C<iso-8859> ("latin") range, do not support the full
Unicode standard; characters that can't be represented are lost in the
conversion.

=head3 Decoding

B<Decoding> is the conversion from I<binary> to I<text>. To decode, you have to
know what encoding was used during the encoding phase. And most of all, it must
be something decodable. It doesn't make much sense to decode a PNG image into a
text string.

=head3 Internal format

Perl has an B<internal format>, an encoding that it uses to encode text strings
so it can store them in memory. All text strings are in this internal format.
In fact, text strings are never in any other format!

You shouldn't worry about what this format is, because conversion is
automatically done when you decode or encode.

=head2 Your new toolkit

Add to your standard heading the following line:

    use Encode qw(encode decode);

Or, if you're lazy, just:

    use Encode;

=head2 I/O flow (the actual 5 minute tutorial)

The typical input/output flow of a program is:

    1. Receive and decode
    2. Process
    3. Encode and output

If your input is binary, and is supposed to remain binary, you shouldn't decode
it to a text string, of course. But in all other cases, you should decode it.

Decoding can't happen reliably if you don't know how the data was encoded. If
you get to choose, it's a good idea to standardize on UTF-8.

    my $foo   = decode('UTF-8', get 'http://example.com/');
    my $bar   = decode('ISO-8859-1', readline STDIN);
    my $xyzzy = decode('Windows-1251', $cgi->param('foo'));

Processing happens as you knew before. The only difference is that you're now
using characters instead of bytes. That's very useful if you use things like
C<substr>, or C<length>.

It's important to realize that there are no bytes in a text string. Of course,
Perl has its internal encoding to store the string in memory, but ignore that.
If you have to do anything with the number of bytes, it's probably best to move
that part to step 3, just after you've encoded the string. Then you know
exactly how many bytes it will be in the destination string.

The syntax for encoding text strings to binary strings is as simple as decoding:

    $body = encode('UTF-8', $body);

If you needed to know the length of the string in bytes, now's the perfect time
for that. Because C<$body> is now a byte string, C<length> will report the
number of bytes, instead of the number of characters. The number of
characters is no longer known, because characters only exist in text strings.

    my $byte_count = length $body;

And if the protocol you're using supports a way of letting the recipient know
which character encoding you used, please help the receiving end by using that
feature! For example, E-mail and HTTP support MIME headers, so you can use the
C<Content-Type> header. They can also have C<Content-Length> to indicate the
number of I<bytes>, which is always a good idea to supply if the number is
known.

    "Content-Type: text/plain; charset=UTF-8",
    "Content-Length: $byte_count"

=head1 SUMMARY

Decode everything you receive, encode everything you send out. (If it's text
data.)

=head1 Q and A (or FAQ)

After reading this document, you ought to read L<perlunifaq> too, then
L<perluniintro>.

=head1 ACKNOWLEDGEMENTS

Thanks to Johan Vromans from Squirrel Consultancy. His UTF-8 rants during the
Amsterdam Perl Mongers meetings got me interested and determined to find out
how to use character encodings in Perl in ways that don't break easily.

Thanks to Gerard Goossen from TTY. His presentation "UTF-8 in the wild" (Dutch
Perl Workshop 2006) inspired me to publish my thoughts and write this tutorial.

Thanks to the people who asked about this kind of stuff in several Perl IRC
channels, and have constantly reminded me that a simpler explanation was
needed.

Thanks to the people who reviewed this document for me, before it went public.
They are: Benjamin Smith, Jan-Pieter Cornet, Johan Vromans, Lukas Mai, Nathan
Gray.

=head1 AUTHOR

Juerd Waalboer <#####@juerd.nl>

=head1 SEE ALSO

L<perlunifaq>, L<perlunicode>, L<perluniintro>, L<Encode>


[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
March 03 2024 20:50:36
root / root
0755
perl.pod
15.889 KB
May 18 2023 21:34:54
root / root
0644
perl5004delta.pod
54.922 KB
May 18 2023 21:34:54
root / root
0644
perl5005delta.pod
33.479 KB
May 18 2023 21:34:54
root / root
0644
perl5100delta.pod
54.233 KB
May 18 2023 21:34:54
root / root
0644
perl5101delta.pod
42.859 KB
May 18 2023 21:34:54
root / root
0644
perl5120delta.pod
87.18 KB
May 18 2023 21:34:54
root / root
0644
perl5121delta.pod
9.903 KB
May 18 2023 21:34:54
root / root
0644
perl5122delta.pod
9.378 KB
May 18 2023 21:34:54
root / root
0644
perl5123delta.pod
4.004 KB
May 18 2023 21:34:54
root / root
0644
perl5124delta.pod
3.586 KB
May 18 2023 21:34:54
root / root
0644
perl5125delta.pod
7.503 KB
May 18 2023 21:34:54
root / root
0644
perl5140delta.pod
140.941 KB
May 18 2023 21:34:54
root / root
0644
perl5141delta.pod
7.779 KB
May 18 2023 21:34:54
root / root
0644
perl5142delta.pod
6.73 KB
May 18 2023 21:34:54
root / root
0644
perl5143delta.pod
7.578 KB
May 18 2023 21:34:54
root / root
0644
perl5144delta.pod
6.179 KB
May 18 2023 21:34:54
root / root
0644
perl5160delta.pod
130.519 KB
May 18 2023 21:34:54
root / root
0644
perl5161delta.pod
5.998 KB
May 18 2023 21:34:54
root / root
0644
perl5162delta.pod
3.51 KB
May 18 2023 21:34:54
root / root
0644
perl5163delta.pod
3.989 KB
May 18 2023 21:34:54
root / root
0644
perl5180delta.pod
116.632 KB
May 18 2023 21:34:54
root / root
0644
perl5181delta.pod
6.44 KB
May 18 2023 21:34:54
root / root
0644
perl5182delta.pod
5.21 KB
May 18 2023 21:34:54
root / root
0644
perl5184delta.pod
4.533 KB
May 18 2023 21:34:54
root / root
0644
perl5200delta.pod
112.987 KB
May 18 2023 21:34:54
root / root
0644
perl5201delta.pod
10.644 KB
May 18 2023 21:34:54
root / root
0644
perl5202delta.pod
12.216 KB
May 18 2023 21:34:54
root / root
0644
perl5203delta.pod
9.172 KB
May 18 2023 21:34:54
root / root
0644
perl5220delta.pod
127.894 KB
May 18 2023 21:34:54
root / root
0644
perl5221delta.pod
10.515 KB
May 18 2023 21:34:54
root / root
0644
perl5222delta.pod
12.333 KB
May 18 2023 21:34:54
root / root
0644
perl5223delta.pod
8.258 KB
May 18 2023 21:34:54
root / root
0644
perl5224delta.pod
4.355 KB
May 18 2023 21:34:54
root / root
0644
perl5240delta.pod
63.405 KB
May 18 2023 21:34:54
root / root
0644
perl5241delta.pod
8.022 KB
May 18 2023 21:34:54
root / root
0644
perl5242delta.pod
4.017 KB
May 18 2023 21:34:54
root / root
0644
perl5243delta.pod
11.16 KB
May 18 2023 21:34:54
root / root
0644
perl5244delta.pod
4.404 KB
May 18 2023 21:34:54
root / root
0644
perl5260delta.pod
99.449 KB
May 18 2023 21:34:54
root / root
0644
perl5261delta.pod
7.741 KB
May 18 2023 21:34:54
root / root
0644
perl5262delta.pod
7.695 KB
May 18 2023 21:34:54
root / root
0644
perl5263delta.pod
6.897 KB
May 18 2023 21:34:54
root / root
0644
perl5280delta.pod
70.423 KB
May 18 2023 21:34:54
root / root
0644
perl561delta.pod
121.79 KB
May 18 2023 21:34:54
root / root
0644
perl56delta.pod
104.688 KB
May 18 2023 21:34:54
root / root
0644
perl581delta.pod
37.169 KB
May 18 2023 21:34:54
root / root
0644
perl582delta.pod
4.365 KB
May 18 2023 21:34:54
root / root
0644
perl583delta.pod
6.187 KB
May 18 2023 21:34:54
root / root
0644
perl584delta.pod
7.19 KB
May 18 2023 21:34:54
root / root
0644
perl585delta.pod
5.751 KB
May 18 2023 21:34:54
root / root
0644
perl586delta.pod
4.542 KB
May 18 2023 21:34:54
root / root
0644
perl587delta.pod
8.161 KB
May 18 2023 21:34:54
root / root
0644
perl588delta.pod
24.68 KB
May 18 2023 21:34:54
root / root
0644
perl589delta.pod
52.637 KB
May 18 2023 21:34:54
root / root
0644
perl58delta.pod
112.466 KB
May 18 2023 21:34:54
root / root
0644
perlaix.pod
19.958 KB
May 18 2023 21:34:54
root / root
0644
perlamiga.pod
5.614 KB
May 18 2023 21:34:54
root / root
0644
perlandroid.pod
7.687 KB
May 18 2023 21:34:54
root / root
0644
perlapi.pod
433.14 KB
May 18 2023 21:34:54
root / root
0644
perlapio.pod
18.833 KB
May 18 2023 21:34:54
root / root
0644
perlartistic.pod
6.846 KB
May 18 2023 21:34:54
root / root
0644
perlbook.pod
8.143 KB
May 18 2023 21:34:54
root / root
0644
perlboot.pod
0.287 KB
May 18 2023 21:34:54
root / root
0644
perlbot.pod
0.297 KB
May 18 2023 21:34:54
root / root
0644
perlbs2000.pod
7.869 KB
May 18 2023 21:34:54
root / root
0644
perlcall.pod
55.377 KB
May 18 2023 21:34:54
root / root
0644
perlce.pod
14.26 KB
May 18 2023 21:34:54
root / root
0644
perlcheat.pod
4.376 KB
May 18 2023 21:34:54
root / root
0644
perlclib.pod
9.394 KB
May 18 2023 21:34:54
root / root
0644
perlcn.pod
4.581 KB
May 18 2023 21:34:54
root / root
0644
perlcommunity.pod
7.048 KB
May 18 2023 21:34:54
root / root
0644
perlcygwin.pod
26.562 KB
May 18 2023 21:34:54
root / root
0644
perldata.pod
45.647 KB
May 18 2023 21:34:54
root / root
0644
perldbmfilter.pod
4.864 KB
May 18 2023 21:34:54
root / root
0644
perldebguts.pod
37.632 KB
May 18 2023 21:34:54
root / root
0644
perldebtut.pod
21.633 KB
May 18 2023 21:34:54
root / root
0644
perldebug.pod
38.338 KB
May 18 2023 21:34:54
root / root
0644
perldelta.pod
6.897 KB
May 18 2023 21:34:54
root / root
0644
perldeprecation.pod
17.743 KB
May 18 2023 21:34:54
root / root
0644
perldiag.pod
277.902 KB
May 18 2023 21:34:54
root / root
0644
perldos.pod
10.275 KB
May 18 2023 21:34:54
root / root
0644
perldsc.pod
25.014 KB
May 18 2023 21:34:54
root / root
0644
perldtrace.pod
7.771 KB
May 18 2023 21:34:54
root / root
0644
perlebcdic.pod
82.259 KB
May 18 2023 21:34:54
root / root
0644
perlembed.pod
36.324 KB
May 18 2023 21:34:54
root / root
0644
perlexperiment.pod
7.026 KB
May 18 2023 21:34:54
root / root
0644
perlfork.pod
13.042 KB
May 18 2023 21:34:54
root / root
0644
perlform.pod
16.219 KB
May 18 2023 21:34:54
root / root
0644
perlfreebsd.pod
1.572 KB
May 18 2023 21:34:54
root / root
0644
perlfunc.pod
383.747 KB
May 18 2023 21:34:54
root / root
0644
perlgit.pod
32.724 KB
May 18 2023 21:34:54
root / root
0644
perlgpl.pod
13.491 KB
May 18 2023 21:34:54
root / root
0644
perlguts.pod
136.063 KB
May 18 2023 21:34:54
root / root
0644
perlhack.pod
39.497 KB
May 18 2023 21:34:54
root / root
0644
perlhacktips.pod
54.208 KB
May 18 2023 21:34:54
root / root
0644
perlhacktut.pod
6.009 KB
May 18 2023 21:34:54
root / root
0644
perlhaiku.pod
1.473 KB
May 18 2023 21:34:54
root / root
0644
perlhist.pod
52.291 KB
May 18 2023 21:34:54
root / root
0644
perlhpux.pod
29.794 KB
May 18 2023 21:34:54
root / root
0644
perlhurd.pod
1.946 KB
May 18 2023 21:34:54
root / root
0644
perlintern.pod
53.293 KB
May 18 2023 21:34:54
root / root
0644
perlinterp.pod
32.897 KB
May 18 2023 21:34:54
root / root
0644
perlintro.pod
21.601 KB
May 18 2023 21:34:54
root / root
0644
perliol.pod
33.384 KB
May 18 2023 21:34:54
root / root
0644
perlipc.pod
69.169 KB
May 18 2023 21:34:54
root / root
0644
perlirix.pod
4.292 KB
May 18 2023 21:34:54
root / root
0644
perljp.pod
7.345 KB
May 18 2023 21:34:54
root / root
0644
perlko.pod
11.972 KB
May 18 2023 21:34:54
root / root
0644
perllexwarn.pod
0.347 KB
May 18 2023 21:34:54
root / root
0644
perllinux.pod
1.453 KB
May 18 2023 21:34:54
root / root
0644
perllocale.pod
67.068 KB
May 18 2023 21:34:54
root / root
0644
perllol.pod
9.355 KB
May 18 2023 21:34:54
root / root
0644
perlmacos.pod
0.978 KB
May 18 2023 21:34:54
root / root
0644
perlmacosx.pod
11.777 KB
May 18 2023 21:34:54
root / root
0644
perlmod.pod
25.635 KB
May 18 2023 21:34:54
root / root
0644
perlmodinstall.pod
12.492 KB
May 18 2023 21:34:54
root / root
0644
perlmodlib.pod
74.689 KB
May 18 2023 21:34:54
root / root
0644
perlmodstyle.pod
22.046 KB
May 18 2023 21:34:54
root / root
0644
perlmroapi.pod
3.137 KB
May 18 2023 21:34:54
root / root
0644
perlnetware.pod
6.492 KB
May 18 2023 21:34:54
root / root
0644
perlnewmod.pod
10.777 KB
May 18 2023 21:34:54
root / root
0644
perlnumber.pod
8.157 KB
May 18 2023 21:34:54
root / root
0644
perlobj.pod
34.704 KB
May 18 2023 21:34:54
root / root
0644
perlootut.pod
26.155 KB
May 18 2023 21:34:54
root / root
0644
perlop.pod
133.059 KB
May 18 2023 21:34:54
root / root
0644
perlopenbsd.pod
1.176 KB
May 18 2023 21:34:54
root / root
0644
perlopentut.pod
9.233 KB
May 18 2023 21:34:54
root / root
0644
perlos2.pod
91.163 KB
May 18 2023 21:34:54
root / root
0644
perlos390.pod
15.307 KB
May 18 2023 21:34:54
root / root
0644
perlos400.pod
4.656 KB
May 18 2023 21:34:54
root / root
0644
perlpacktut.pod
50.08 KB
May 18 2023 21:34:54
root / root
0644
perlperf.pod
48.712 KB
May 18 2023 21:34:54
root / root
0644
perlplan9.pod
5.005 KB
May 18 2023 21:34:54
root / root
0644
perlpod.pod
21.676 KB
May 18 2023 21:34:54
root / root
0644
perlpodspec.pod
66.871 KB
May 18 2023 21:34:54
root / root
0644
perlpolicy.pod
25.028 KB
May 18 2023 21:34:54
root / root
0644
perlport.pod
85.549 KB
May 18 2023 21:34:54
root / root
0644
perlpragma.pod
5.055 KB
May 18 2023 21:34:54
root / root
0644
perlqnx.pod
6.517 KB
May 18 2023 21:34:54
root / root
0644
perlre.pod
118.067 KB
May 18 2023 21:34:54
root / root
0644
perlreapi.pod
29.623 KB
May 18 2023 21:34:54
root / root
0644
perlrebackslash.pod
31.071 KB
May 18 2023 21:34:54
root / root
0644
perlrecharclass.pod
47.88 KB
May 18 2023 21:34:54
root / root
0644
perlref.pod
34.477 KB
May 18 2023 21:34:54
root / root
0644
perlreftut.pod
18.35 KB
May 18 2023 21:34:54
root / root
0644
perlreguts.pod
37.43 KB
May 18 2023 21:34:54
root / root
0644
perlrepository.pod
0.497 KB
May 18 2023 21:34:54
root / root
0644
perlrequick.pod
18.063 KB
May 18 2023 21:34:54
root / root
0644
perlreref.pod
14.398 KB
May 18 2023 21:34:54
root / root
0644
perlretut.pod
118.415 KB
May 18 2023 21:34:54
root / root
0644
perlriscos.pod
1.493 KB
May 18 2023 21:34:54
root / root
0644
perlrun.pod
52.295 KB
May 18 2023 21:34:54
root / root
0644
perlsec.pod
25.57 KB
May 18 2023 21:34:54
root / root
0644
perlsolaris.pod
29.123 KB
May 18 2023 21:34:54
root / root
0644
perlsource.pod
6.715 KB
May 18 2023 21:34:54
root / root
0644
perlstyle.pod
8.428 KB
May 18 2023 21:34:54
root / root
0644
perlsub.pod
71.257 KB
May 18 2023 21:34:54
root / root
0644
perlsymbian.pod
14.999 KB
May 18 2023 21:34:54
root / root
0644
perlsyn.pod
43.469 KB
May 18 2023 21:34:54
root / root
0644
perlsynology.pod
7.596 KB
May 18 2023 21:34:54
root / root
0644
perlthrtut.pod
45.37 KB
May 18 2023 21:34:54
root / root
0644
perltie.pod
37.702 KB
May 18 2023 21:34:54
root / root
0644
perltoc.pod
677.886 KB
May 18 2023 21:34:54
root / root
0644
perltodo.pod
0.367 KB
May 18 2023 21:34:54
root / root
0644
perltooc.pod
0.287 KB
May 18 2023 21:34:54
root / root
0644
perltoot.pod
0.287 KB
May 18 2023 21:34:54
root / root
0644
perltrap.pod
10.371 KB
May 18 2023 21:34:54
root / root
0644
perltru64.pod
8.293 KB
May 18 2023 21:34:54
root / root
0644
perltw.pod
4.372 KB
May 18 2023 21:34:54
root / root
0644
perlunicode.pod
80.558 KB
May 18 2023 21:34:54
root / root
0644
perlunicook.pod
24.891 KB
May 18 2023 21:34:54
root / root
0644
perlunifaq.pod
13.327 KB
May 18 2023 21:34:54
root / root
0644
perluniintro.pod
37.441 KB
May 18 2023 21:34:54
root / root
0644
perluniprops.pod
278.619 KB
May 18 2023 21:34:54
root / root
0644
perlunitut.pod
7.765 KB
May 18 2023 21:34:54
root / root
0644
perlutil.pod
7.461 KB
May 18 2023 21:36:25
root / root
0644
perlvar.pod
76.527 KB
May 18 2023 21:34:54
root / root
0644
perlvms.pod
49.632 KB
May 18 2023 21:34:54
root / root
0644
perlvos.pod
3.753 KB
May 18 2023 21:34:54
root / root
0644
perlwin32.pod
38.377 KB
May 18 2023 21:34:54
root / root
0644
perlxs.pod
77.07 KB
May 18 2023 21:34:54
root / root
0644
perlxstut.pod
48.921 KB
May 18 2023 21:34:54
root / root
0644
perlxstypemap.pod
23.438 KB
May 18 2023 21:34:54
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF