UTF-8/ja

UTF-8は、Article description::この例では、シンボル当たり1〜4バイトを使用することを意味する可変長の文字エンコーディングです. UTF-8の最初の1バイトはASCIIに使用されており、これによりこの文字セットはASCIIとの完全な後方互換性を持っています. UTF-8では、ラテン文字に最初の1バイトのみが使用されるため、ASCIIとラテン文字はデータのサイズをほとんど増加させることなく交換可能です. より上位のバイト範囲を割り当てられている日本語のような東洋の文字を使用している人々は、データが50%近く冗長になってしまうために不満を抱いています.

キャラクターエンコードとは？
コンピュータ自体があろう人間として印刷されたテキストを理解していません. コンピュータの場合は、テキストのすべての文字は番号で表されます. 伝統的に、（符号化方式、符号化、または文字セットとして知られている）アルファベット文字を表すために使用される数字の各セットが原因でコンピュータのハードウェアの制限のサイズに制限されていました.

キャラクターエンコードの歴史
最も一般的な(あるいは、少なくとも最も広く受け入れられている)文字セットはASCII(American Standard Code for Information Interchange)です. ASCIIはこれまで作られた中でもっとも成功したソフトウェア標準であると一般的に考えられています. 現代のASCIIは1986年に米国規格協会によって標準化されました(ANSI X3.4, RFC 20, ISO/IEC 646:1991, ECMA-6).

ASCII は厳密に7ビット、つまり2進数7桁で表されるビットパターンであり、10進数で0から127までの範囲を提供します. これらには32の目に見えない制御文字が含まれており、そのほとんどは0から31の間にありますが、最後の制御文字 DEL または delete は127です. 32から126までの文字は目に見える文字です: スペース、句読点、ラテン文字、そして数字.

ASCII の第8ビットは元々はエラーチェックのためのパリティービットとして使われていました. エラーチェックが不要な場合は0のままになっています. つまり、ASCII においては各文字が1バイトで表わされます.

ASCIIは現代英語でやりとりするには十分でしたが、アクセント付きの文字を含む他のヨーロッパの言語で使用する場合はそう簡単にはいきませんでした. ISO 8859標準はこうした需要に対応すべく開発されました. それらはASCIIに対する後方互換性を有していましたが、8ビット目を空にするのではなく各エンコーディングで更なる127文字を表わすために使用していました. 現在のところISO 8859標準には15のバリエーションがありますが、ISO 8859の限界は間もなく明らかになりました. これらの文字セットのうちASCII互換のバイト範囲以外では、しばしば各バイトで表現される文字同士で衝突するものがありました. またMicrosoft WindowsのいくつかのバージョンではWindows-1252が使われており、これによって文字エンコーディング間の相互運用がますます複雑になりました. これはISO 8859-1の上位セットですが、いくつかの点で異なっています; これらのセットはどれもASCIIとの互換性を維持しています.

日本語や韓国語(および比較的小規模な中国語)で使われる EUC (Extended Unix Coding) のような、非ラテン文字用のまったく異なる単一バイトエンコーディングの開発は、さらなる混乱をもたらしました. 他のオペレーティングシステムは、たとえば Shift-JIS と ISO-2022-JP のように、同じ言語に対して異なる文字セットをまだ使用していました. キリル文字を見たいユーザーは、失敗に終わった ISO 8859-5 や一般的な Windows-1251 セットなどの他のキリルエンコーディングはもちろんのこと、ロシア語やブルガリア語なら KOI8-R、ウクライナ語なら KOI8-U の中からも選択する必要がありました. これらの文字セットはいずれも ASCII との互換性がほとんどなくなっています. もっとも、KOI8 エンコーディングはキリル文字をラテン文字の順番で配列しているため、8ビット目が失われた場合でもテキストは大文字と小文字が逆になった音訳として ASCII ターミナル上で解読することができます.

これらはいずれも大きな混乱を招き、多言語でのやりとりはほとんど不可能になりました; 特に異なる文字種の間では. それでは Unicode にいってみましょう.

Unicode とは何ですか？
Unicode は伝統的な文字セットの単一バイトという制約を打ち捨てました. これは、65,536のコードポイントについて17の"面"を用いることで、最大で1,114,112の文字を記述します. "Basic Multilingual Plane"(基本多言語面)または BMP として知られる最初の面には、ユーザーが必要とするであろう文字がほとんどすべて含まれています. 多くの人が Unicode は16ビットの文字セットであるという誤った仮定を持っています.

Unicode は多くの異なる方法でマップされていますが、もっとも一般的な2つが UTF (Unicode Transformation Format) と UCS (Universal Character Set) です. UCS の後ろの数がバイト数を表わしているのに対し、UTF の後ろの数は1ユニットあたりのビット数を表わしています. UTF-8 は、その8ビットという透明性により、もっとも広まった Unicode テキストの情報交換法となっています.

UTF-8 ができること
UTF-8によって、ユーザーはデータの冗長さを比較的低く抑えつつ、標準規格に準拠しかつ国際的に受け入れられている多言語環境で作業することができます. 電子メール、IRC、またその他ほぼすべてのメディアでインターネットを通じて非ASCII文字を送信する場合には、UTF-8を使うことが推奨されます. それにもかかわらず、多数の人がオンラインでの通信におけるUTF-8をよくないものとみなしています. どんな場合であれ、非ASCIIのUTF-8を使う前に、各チャンネル、メーリングリスト、UsenetグループのUTF-8への態度を知っておいた方が良いでしょう.

UTF-8 のロケールを見つけ、または作成する
これで Unicode の原則を説明し終わりましたから、ローカルで UTF-8 を使う準備をしていきましょう！

より多くの知識に関心があるユーザー向けに、さらなる解説が Gentoo ローカライゼーションガイドにあります.

次に、ユーザーは選択した言語で UTF-8 ロケールが使用可能か、それともそれを生成する必要があるか、調べなければなりません.

前のコマンドの出力から のように終わっている結果を探してください. 似たような接尾語の付いた結果がない場合、UTF-8互換のロケールを作成する必要があります.

"en_GB"をお望みのロケールに変更してください:

UTF-8 ロケールを含めるもう一つの方法は、それを ファイルに追加してから必要なロケールを  コマンドで生成する方法です. ロケールは のロケールアーカイブに書き込まれます.

ロケールを設定する
新しい UTF-8 ロケールを使用するためには、環境変数を1つセットする必要があります: LC_CTYPE です(必要に応じて、 LANG 変数を編集してシステム言語を同様に変更することもできます). また、これをセットする方法もたくさんあります; システム管理者として特定のユーザーのみ UTF-8 の環境にしたい場合があるでしょう. この場合はそのユーザーの (Bourne shell ユーザーの  向け)、 または  (Bourne again shell ユーザーの 向け)でそれらの変数をセットします. 詳細やベストプラクティスについてはローカライゼーションガイドを見てください.

また、ロケールを全体に設定したい場合もあるでしょう. 筆者が特にそうすることを勧めているのが、 を使用している場合です. なぜなら、この init スクリプトは、前述したどのシェルスタートアップファイルが読み込まれるよりも前にディスプレイマネージャーとデスクトップを開始するからです. 言い換えると、xdm は環境にどの変数が読み込まれるよりも早く実行されるのです.

ロケールを全体に設定するには ファイルを使う必要があります. このファイルを以下のようにします:

次に、以下のコマンドを実行して環境を更新する必要があります:

では、 を引数なしで実行して正しい変数が環境に読み込まれているか見てみましょう:

代わりにeselectを使ってロケールを設定する
上で説明したようにしてシステムを管理できますが、ユーティリティーを使って正しいロケールが設定されているか調べることもできます.

を使ってシステムで使用可能なロケールを一覧表示するには:

を使ってロケールを設定するのも、一覧表示と同じくらい簡単です. 正しいロケールが特定できたら、以下を実行します:

結果を確認します:

に  ではなく   を含めたい場合には、適切な  コマンドを実行します:

次のコマンドを実行すると、シェルの変数を更新します:

これで全部です. システムは UTF-8 を使用するようになりました. 次のハードルは日常的に使用するアプリケーションの設定です.

アプリケーション・ソフトウェアのサポート
Unicode が最初にソフトウェアの世界で勢いを得た頃、マルチバイト文字セットは、ほとんどのよく使われているプログラムでの基本的な言語である C のような言語にはあまり適していませんでした. 今日でもいくつかのプログラムは UTF-8 を適切に扱えません. 幸いなことに、プログラムの多く、特によく使われているものは、サポートされています.

(V)FAT
FAT ファイルシステムでの UTF-8 サポートについては、FAT の記事を参照してください.

ファイル名
For changing the encoding of filenames, can be used.

The format of the command is as follows:

Substitute iso-8859-1 with the charset being converted from:

For changing the contents of files, use the utility, it comes bundled with  and should be installed on all Gentoo systems. Substitute iso-8859-1 with the charset being converted from. After running the command be sure to check for sane output:

To convert a file, another file must be created:

も、この用途に用いることができます.

システムコンソール
To enable UTF-8 on the console edit. Set  and read the comments -- it is important to have a font that has a good range of characters to make the most of Unicode. For this to work make sure the Unicode locale has been properly created.

The keymap variable, set in, should have a Unicode keymap specified.

ncurse と slang
It is wise to add to the global USE flags in, and then to re-emerge  and. Portage will do this automatically if the  or   options are used. Run the following command to pull in the packages:

We also need to rebuild packages that link to these, now the USE changes have been applied. The tool we use is part of the  package.

KDE や GNOME、Xfce
主要なデスクトップ環境のすべてが完全なUnicodeサポートを持っており、すでにこのガイドで説明されてきたものよりもさらにセットアップを必要としません. 根本的なグラフィカル・ツールキット（Qtか、GTK+2）がUTF-8を認識しているためです. 続いて、これらのツールキットの上で実行されているすべてのアプリケーションは、UTF-8対応のボックスのうちでなければなりません.

The exceptions to this rule come in Xlib and GTK+ 1. GTK+ 1 requires a iso-10646-1 FontSpec in the, for example. Also, applications using Xlib or Xaw will need to be given a similar FontSpec, otherwise they will not work.

If an application has support for both a Qt and GTK+ 2 GUI, the GTK+ 2 GUI will generally give better results with Unicode.

X11 およびフォント
TrueType fonts have support for Unicode, and most of the fonts that ship with Xorg have extensive character support, although, obviously, not every single glyph available in Unicode has been created for that font.

Also, many font packages in Portage are Unicode aware. See the Fontconfig page for more information on recommended fonts and configuration.

ウインドウマネージャーおよび端末エミュレーター
Window managers not built on GTK+ or Qt generally have very good Unicode support, as they often use the Xft library for handling fonts. If the window manager does not use Xft for fonts, then it is still possible to use the FontSpec mentioned in the previous section as a Unicode font.

Terminal emulators that use Xft and support Unicode are harder to come by. Aside from Konsole and GNOME Terminal, the best options in Portage are, , , , or plain when built with the   USE flag and invoked as. supports UTF-8 too, when invoked as or the following is put into the :

Vim や Emacs、Xemacs、Nano
Vim provides full UTF-8 support, and also has builtin detection of UTF-8 files. For further information in Vim, use.

GNU Emacs since version 23 and XEmacs version 21.5 have full UTF-8 support. GNU Emacs 24 also supports editing bidirectional text.

Nano has provided full UTF-8 support since version 1.3.6.

シェル
Currently, provides full Unicode support through the GNU readline library. Z Shell offers Unicode support with the   USE flag.

The C shell, and  do not provide UTF-8 support at all.

Irssi
Irssi has complete UTF-8 support, although it does require a user to set an option.

For channels where non-ASCII characters are often exchanged in non-UTF-8 charsets, the command may be used to convert the characters. Type for more information.

Mutt
The Mutt mail user agent has very good Unicode support. To use UTF-8 with Mutt, nothing needs to be put in the configuration files. Mutt will work under Unicode environment without modification if all the configuration files (signature included) are UTF-8 encoded.

Further information is available from the Mutt Wiki.

Man
Man pages are an integral part of any Linux machine. To ensure that any unicode in the man pages render correctly, edit and replace a line as shown below. This is only needed when is used instead of.

elinks や links
These are commonly used text-based browsers, and we shall see how we can enable UTF-8 support on them. On and, there are two ways to go about this, one using the Setup option from within the browser or editing the config file. To set the option through the browser, open a site with or  and then + to enter the Setup Menu then select Terminal options, or press. Scroll down and select the last option  by pressing. Then Save and exit the menu. On one may have to do a repeat + and then press  to save. The config file option, is shown below.

Samba
Samba is a software suite which implements the SMB (Server Message Block) protocol for UNIX systems such as Macs, Linux and FreeBSD. The protocol is also sometimes referred to as the Common Internet File System (CIFS). Samba also includes the NetBIOS system - used for file sharing over windows networks.

Add the following lines under the  section:

Testing it all out
There are numerous UTF-8 test websites around and most of the popular browsers in Gentoo have full UTF-8 support.

テキストのみのWebブラウザのいずれかを使用する場合は、Unicode対応の端末が使用されている絶対に確認してください.

If certain characters are displayed as boxes with letters or numbers inside, then the current font does not have glyphs for those characters. Instead, it displays a box with the hex code of the UTF-8 symbol.


 * unicode-table.com
 * A W3C UTF-8 Test Page
 * A UTF-8 test page provided by the University of Frankfurt

System configuration files (in /etc)
Most system configuration files (such as ) do not support UTF-8. It is recommended to stick with the ASCII character set for these files.

External resources

 * Wikipedia の Unicode の記事
 * The Wikipedia の UTF-8 の記事
 * Unicode.org
 * UTF-8.com
 * RFC 3629
 * RFC 2277
 * Characters vs. Bytes
 * Locales and Internationalization