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 は環境にどの変数が読み込まれるよりも早く実行されるのです.

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

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

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

The values of locale environment variables that have been explicitly set e.g. in an export statement (if using bash) are listed without double quotes. Those whose value has been inherited from other locale environment variables have their values in double quotes.

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

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

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

結果を確認します:

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

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

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

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

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

ファイル名
ファイル名のエンコーディングを変える場合には を使用できます.

コマンドの書式は以下のとおりです:

iso-8859-1 は変換元の文字セットに置き換えてください:

ファイルの内容を変換するには ユーティリティーを使用します. このユーティリティーは に含まれており、すべての Gentoo システムにインストールされているはずです. iso-8859-1 を変換元の文字セットで置き換えてください. コマンドを実行したら、出力が正常か必ず確認してください:

ファイルを変換するには、もう一つのファイルを作成する必要があります:

recode パッケージもこの用途に用いることができます.

システムコンソール
UTF-8 をコンソールで有効にするには を編集します. をセットしてコメントを読んでください -- Unicode の大部分をカバーする、適切な範囲の文字を含むフォントを用意しておくことが大事です. これを動作させるには、Unicode ロケールが正しく作成されていることを確認してください.

でセットされている keymap 変数には Unicode キーマップを指定してください.

ncurses と slang
を 内のグローバルUSE フラグに追加し、 と  を再度 emerge するのが賢明です. または  オプションを使用すると、Portage がこれを自動的に行ってくれます. パッケージを導入するには以下のコマンドを実行します:

また、USE フラグが適用されたものにリンクしているパッケージも再ビルドする必要があります. 使用しているツール は  パッケージの一部です.

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

このルールの例外が Xlib と GTK+ 1 にあります. GTK+ 1 ではたとえば  のような iso-10646-1 の FontSpec が  内に必要です. また、Xlib や Xaw を使っているアプリケーションでも同様の FontSpec が必要で、これがないと動作しないでしょう.

アプリケーションが Qt と GTK+ 2 の両方の GUI をサポートしている場合、一般的には GTK+ 2 GUI の方が Unicode に関してよりよい結果を得られるでしょう.

X11 およびフォント
TrueType フォントは Unicode をサポートしており、Xorg に付属するほとんどのフォントは広範囲の文字をサポートしています. しかし、明らかにこれらのフォントでは Unicode にあるすべてのグリフが作成されているわけではありません.

同様に、Portage にあるフォントパッケージの多くも Unicode 対応です. さらなる情報やおすすめのフォント、設定については Fontconfig ページを参照してください.

ウインドウマネージャーおよび端末エミュレーター
GTK+ や Qt の上に構築されていないウィンドウマネージャーはしばしばフォントの処理に Xft ライブラリを使っているため、一般的に Unicode をとても良好にサポートしています. ウィンドウマネージャーが Xft をフォントに使っていない場合でも、前の節で触れた FontSpec を Unicode フォントとして利用できます.

Xft を使用して Unicode をサポートしているターミナルエミュレーターは見つけるのが困難です. Konsole や GNOME Terminal を除くと、Portage 内の最良の選択肢は 、、、 を使うか、または  USE フラグを有功にした  の   を実行することでしょう. として実行するか以下の行を に追加することで、 でも UTF-8 がサポートされます:

Vim や Emacs、Xemacs、nano
Vim は完全な UTF-8 サポートを提供しており、UTF-8 ファイルの検知機能も内蔵されています. Vim についての詳細な情報を得るには  を使用してください.

GNU Emacs バージョン23以降と XEmacs バージョン21.5以降は UTF-8 を完全にサポートしています. GNU Emacs 24 は双方向テキスト(訳註: 右から左へ読む文字と左から右へ読む文字が混在しているテキスト)もサポートしています.

nano はバージョン1.3.6から UTF-8 の完全なサポートを提供しています.

シェル
現在のところ、 は GNU readline ライブラリを通じて Unicode の完全なサポートを提供しています. Z shell は   USE フラグで Unicode サポートを提供します.

C shell、 および は UTF-8 をサポートしていません.

Irssi
Irssi は UTF-8 を完全にサポートしていますが、ユーザーによるオプション設定が必要です.

非ASCII文字が UTF-8 以外の文字セットでやりとりされるチャンネルでは、文字を変換するために コマンドが使えるかもしれません. 詳細な情報を得るには と入力してください.

Mutt
Mutt メールユーザーエージェントは Unicode をとても良好にサポートしています. Mutt で UTF-8 を使うために設定ファイルに何かを追加する必要はありません. Mutt は、すべての設定ファイルが(署名も含めて) UTF-8 でエンコードされている場合、何ら変更を加えなくても Unicode 環境で動作します.

Mutt Wiki にさらなる情報があります.

links や elinks
よく使われているテキストベースのブラウザがいくつかあるので、それらで UTF-8 サポートを有功にする方法を見ていきましょう. と ではそうするための2つの方法があり、1つはブラウザ内からセットアップオプションを使用するもの、もう1つは設定ファイルの編集です. ブラウザから設定を変更するには、 や でサイトを開いてから + を押してセットアップメニューに入り、Terminal options を選択するか  を押します. 下へスクロールして最後にある  を  で選択します. そうしたら保存してメニューを終了してください. の場合、保存するためには + をもう一回押してから を押す必要があるかもしれません. 設定ファイルのオプションは以下のとおりです.

Samba
Samba は Macs、Linux、および FreeBSD のような UNIX システム向けに SMB (Server Message Block) プロトコルを実装しているソフトウェアスイートです. このプロトコルは Common Internet File System (CIFS) と呼ばれることもあります. Samba は NetBIOS システムも含んでいます - これは Windows ネットワークを介したファイル共有のために使われます.

セクションの下に以下を追加します:

試してみる
UTF-8 のテスト用ウェブサイトは数多くあり、人気がある Gentoo のブラウザ のほとんどは UTF-8 を完全にサポートしています.

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

特定の文字が、文字や数字が中に入っている四角形として表示された場合、現在のフォントにはそれらの文字グリフが含まれていません. 代わりにその UTF-8 シンボルの16進コードが入った四角形が表示されます.


 * unicode-table.com
 * W3C の UTF-8 テストページ
 * フランクフルト大学により提供されている UTF-8 テストページ

(/etc 内の)システム設定ファイル
システム設定ファイル(たとえば など)のほとんどは UTF-8 をサポートしていません. これらのファイルについては ASCII 文字セットのままにしておくことをお勧めします.

外部の情報

 * Wikipedia の Unicode の記事
 * The Wikipedia の UTF-8 の記事
 * Unicode.org
 * UTF-8.com
 * RFC 3629
 * RFC 2277
 * Characters vs. Bytes
 * The GNU C Library: Locales and Internationalization
 * Unifoundry.com - Unicode Tutorial
 * unicode USE フラグの説明