Welcome to Linux Knowledge Base and Tutorial
"The place where you learn linux"
Let The Music Play: Join EFF Today

 Create an AccountHome | Submit News | Your Account  

Tutorial Menu
Linux Tutorial Home
Table of Contents

· Introduction to Operating Systems
· Linux Basics
· Working with the System
· Shells and Utilities
· Editing Files
· Basic Administration
· The Operating System
· The X Windowing System
· The Computer Itself
· Networking
· System Monitoring
· Solving Problems
· Security
· Installing and Upgrading
· Linux and Windows

Glossary
MoreInfo
Man Pages
Linux Topics
Test Your Knowledge

Site Menu
Site Map
FAQ
Copyright Info
Terms of Use
Privacy Info
Disclaimer
WorkBoard
Thanks
Donations
Advertising
Masthead / Impressum
Your Account

Communication
Feedback
Forums
Private Messages
Surveys

Features
HOWTOs
News Archive
Submit News
Topics
User Articles
Web Links

Google
Google


The Web
linux-tutorial.info

Who's Online
There are currently, 266 guest(s) and 5 member(s) that are online.

You are an Anonymous user. You can register for free by clicking here

  

utf8



DESCRIPTION

       The  Unicode  3.0  character  set  occupies  a 16-bit code
       space. The most obvious Unicode encoding (known as  UCS-2)
       consists  of  a sequence of 16-bit words. Such strings can
       contain as parts of many 16-bit characters bytes like '\0'
       or '/' which have a special meaning in filenames and other
       C library function parameters.  In addition, the  majority
       of  UNIX  tools  expects ASCII files and can't read 16-bit
       words as characters without major modifications. For these
       reasons, UCS-2 is not a suitable external encoding of Uni­
       code in filenames, text files, environment variables, etc.
       The ISO 10646 Universal Character Set (UCS), a superset of
       Unicode, occupies even a 31-bit code space and the obvious
       UCS-4  encoding   for  it (a sequence of 32-bit words) has
       the same problems.

       The UTF-8 encoding of Unicode and UCS does not have  these
       problems and is the common way in which Unicode is used on
       Unix-style operating systems.


PROPERTIES

       The UTF-8 encoding has the following nice properties:

       * UCS characters 0x00000000 to 0x0000007f (the classic US-
         ASCII  characters)  are  encoded simply as bytes 0x00 to
         0x7f (ASCII compatibility). This means  that  files  and
         strings  which  contain only 7-bit ASCII characters have
         the same encoding under both ASCII and UTF-8.

       * All UCS characters > 0x7f are encoded  as  a  multi-byte
         sequence  consisting  only of bytes in the range 0x80 to
         0xfd, so no ASCII byte can appear  as  part  of  another
         character  and  there  are no problems with e.g. '\0' or
         '/'.

       * The lexicographic sorting order of UCS-4 strings is pre­
         served.

       * All  possible 2^31 UCS codes can be encoded using UTF-8.

       * The bytes 0xfe and 0xff are  never  used  in  the  UTF-8
         encoding.

       * The first byte of a multi-byte sequence which represents
         a single non-ASCII UCS character is always in the  range
         0xc0  to  0xfd  and  indicates  how long this multi-byte
         sequence is. All further bytes in a multi-byte  sequence
         are  in  the range 0x80 to 0xbf. This allows easy resyn­
         chronization and makes the encoding stateless and robust
         against missing bytes.

       * UTF-8  encoded  UCS  characters  may  be up to six bytes

       0x00000800 - 0x0000FFFF:
           1110xxxx 10xxxxxx 10xxxxxx

       0x00010000 - 0x001FFFFF:
           11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x00200000 - 0x03FFFFFF:
           111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x04000000 - 0x7FFFFFFF:
           1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       The xxx bit positions are filled  with  the  bits  of  the
       character  code  number in binary representation. Only the
       shortest possible multi-byte sequence which can  represent
       the code number of the character can be used.

       The  UCS  code values 0xd800-0xdfff (UTF-16 surrogates) as
       well as 0xfffe and 0xffff (UCS non-characters) should  not
       appear in conforming UTF-8 streams.


EXAMPLES

       The  Unicode  character  0xa9  =  1010 1001 (the copyright
       sign) is encoded in UTF-8 as

              11000010 10101001 = 0xc2 0xa9

       and character 0x2260 =  0010  0010  0110  0000  (the  "not
       equal" symbol) is encoded as:

              11100010 10001001 10100000 = 0xe2 0x89 0xa0


APPLICATION NOTES

       Users have to select a UTF-8 locale, for example with

              export LANG=en_GB.UTF-8

       in order to activate the UTF-8 support in applications.

       Application  software  that  has  to  be aware of the used
       character encoding should always set the locale  with  for
       example

              setlocale(LC_CTYPE, "")

       and programmers can then test the expression

              strcmp(nl_langinfo(CODESET), "UTF-8") == 0

       to  determine whether a UTF-8 locale has been selected and
       whether therefore all plaintext standard input and output,
       cursor positions.

       The  official  ESC  sequence  to  switch  from an ISO 2022
       encoding scheme (as used for instance by VT100  terminals)
       to  UTF-8  is ESC % G ("\x1b%G"). The corresponding return
       sequence from UTF-8 to ISO 2022 is  ESC  %  @  ("\x1b%@").
       Other ISO 2022 sequences (such as for switching the G0 and
       G1 sets) are not applicable in UTF-8 mode.

       It can be hoped that in the foreseeable future, UTF-8 will
       replace  ASCII  and  ISO  8859 at all levels as the common
       character encoding on POSIX systems, leading to a signifi­
       cantly richer environment for handling plain text.


SECURITY

       The  Unicode  and  UCS standards require that producers of
       UTF-8 shall use the shortest form possible, e.g.,  produc­
       ing  a  two-byte sequence with first byte 0xc0 is non-con­
       forming.  Unicode 3.1 has added the requirement that  con­
       forming  programs  must  not  accept non-shortest forms in
       their input. This is for security reasons: if  user  input
       is  checked  for  possible  security violations, a program
       might check only for the ASCII version of "/../" or ";" or
       NUL  and  overlook  that  there are many non-ASCII ways to
       represent these things in a non-shortest UTF-8 encoding.


STANDARDS

       ISO/IEC 10646-1:2000, Unicode 3.1, RFC 2279, Plan 9.


AUTHOR

       Markus Kuhn <mgk25@cl.cam.ac.uk>


SEE ALSO

       nl_langinfo(3), setlocale(3), charsets(7), unicode(7)

GNU                         2001-05-11                   UTF-8(7)
  
Help us cut cost by not downloading the whole site!
Use of automated download sofware ("harvesters") such as wget, httrack, etc. causes the site to quickly exceed its bandwidth limitation and therefore is expressedly prohibited. For more details on this, take a look here

Login
Nickname

Password

Security Code
Security Code
Type Security Code


Don't have an account yet? You can create one. As a registered user you have some advantages like theme manager, comments configuration and post comments with your name.

Help if you can!


Amazon Wish List

Did You Know?
You can choose larger fonts by selecting a different themes.


Friends



Tell a Friend About Us

Bookmark and Share



Web site powered by PHP-Nuke

Is this information useful? At the very least you can help by spreading the word to your favorite newsgroups, mailing lists and forums.
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters. Articles are the property of their respective owners. Unless otherwise stated in the body of the article, article content (C) 1994-2013 by James Mohr. All rights reserved. The stylized page/paper, as well as the terms "The Linux Tutorial", "The Linux Server Tutorial", "The Linux Knowledge Base and Tutorial" and "The place where you learn Linux" are service marks of James Mohr. All rights reserved.
The Linux Knowledge Base and Tutorial may contain links to sites on the Internet, which are owned and operated by third parties. The Linux Tutorial is not responsible for the content of any such third-party site. By viewing/utilizing this web site, you have agreed to our disclaimer, terms of use and privacy policy. Use of automated download software ("harvesters") such as wget, httrack, etc. causes the site to quickly exceed its bandwidth limitation and are therefore expressly prohibited. For more details on this, take a look here

PHP-Nuke Copyright © 2004 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Page Generation: 0.07 Seconds