目次
第1章 文字とコンピュータ
1.1 コンピュータで文字を扱う基本
- 文字コードとフォント
- 図形を交換するのでなく,符号を交換する
- 文字の形の細部は伝わらない
1.2 文字を符号化するということ
- コンピュータで情報を扱う基礎
- 文字を符号化する例
1.3 文字集合と符号化文字集合
- 何文字必要か
- 文字の集合
- 文字の集合に符号を振る
- 符号化文字集合とは
- 実用的な符号化文字集合の例
- 一意な符号化 ――文字コードの原則
- 符号化文字集合を実装するとは
- 文字化け
- 外部コードと内部コード
- 規格における定義 ――符号化文字集合,符号
1.4 制御文字 ――文字ではない文字
- 文字コードにあるのは文字だけではない
- おもな制御文字
1.5 文字コードはなぜ複雑になるのか
- 文字コードを複雑化させる二つの理由
- 過去の経緯の積み重ね
- 文字そのものの難しさ
- 文字コードの複雑さを理解するために
1.6 まとめ
第2章 文字コードの変遷
2.1 最もシンプルな文字コード ――ASCII,ISO/IEC 646
- 7ビットの1バイトコードで文字を表すASCII
- ASCIIの各国用の変種 ――各国語版ISO/IEC 646
- ISO/IEC 646とJIS X 0201
2.2 文字コードの構造と拡張方法を定める ――ISO/IEC 2022
- ISO/IEC 2022の登場 ――8ビットコード,2バイトコード
- ASCIIを拡張する
- 8ビットの使用 ――ISO/IEC 2022の枠組み,CL/GL,CR/GR
- 符号化文字集合の呼び出しの概念
- 複数バイト文字集合
- 符号化文字集合の組み合わせ・切り替え
- ISO/IEC 2022とエスケープシーケンス
- ISO/IEC 2022と符号化方式
2.3 2バイト符号化文字集合の実用化 ――JIS X 0208,各種符号化方式
- JIS X 0208 ――漢字を扱う
- 各種「符号化方式」の成立
- 1バイトコードに2バイトコードを組み合わせたい
- Shift_JISやEUC-JP,ISO-2022-JPの登場
- 東アジアでの普及
2.4 1バイト符号化文字集合の広がり ――ISO/IEC 8859,Latin-1
- ヨーロッパ各地域向けの文字コード
- ISO/IEC 8859,ISO/IEC 8859-1,Latin-1
- 1バイト文字集合の乱立
2.5 国際符号化文字集合の模索と成立 ――Unicode,ISO/IEC 10646
- 世界中の文字を一つの表に収める
- ISO/IEC 10646とUnicodeの誕生と統合
- Unicodeの拡張と各種符号化方式の成立 ――UTF-16,UTF-8
- 国際符号化文字集合の現状
2.6 まとめ
- Column 字形と字体
第3章 代表的な符号化文字集合
3.1 ASCIIとISO/IEC 646 ――最も基本的な1バイト文字集合
- ASCIIとISO/IEC 646国際基準版
- 各国版のISO/IEC 646
3.2 JIS X 0201 ――ラテン文字と片仮名の1バイト文字集合
- JIS X 0201の概要
- ラテン文字集合
- JIS X 0201の片仮名集合,濁点・半濁点
- ASCIIとの違い ――円記号とバックスラッシュ,オーバーラインとチルダ
3.3 JIS X 0208 ――日本の最も基本的な2バイト文字集合
- JIS X 0208の概要 ――ISO/IEC 2022準拠
- 符号の構造 ――2バイトのビット組み合わせ
- 文字集合の特徴
- 記号類
- ギリシャ文字
- キリル文字
- ラテン文字
- 平仮名・片仮名
- 漢字 ――第1水準,第2水準
- 過去の改正の概略
- 1983年改正
- 1990年改正
- 1997年改正 ――包摂規準
- JIS X 0208:1997の符号化方式
- 外字・機種依存文字の問題
3.4 JIS X 0212 ――補助漢字
- JIS X 0212の概要
- 文字集合の特徴
- 非漢字
- 漢字
- JIS X 0212と符号化方式 ――Shift_JISで扱えない
- Column 「Unicodeで(他の符号化文字集合を)実装」という表現の問題
3.5 JIS X 0213 ――漢字第3・第4水準への拡張
- JIS X 0213の概要
- 漢字集合1面,漢字集合2面
- 文字集合の特徴
- 一般の印刷物でよく使われる記号類
- 13区の機種依存文字と互換の文字
- ラテン文字・発音記号
- ASCIIとの互換性のための文字
- アイヌ語表記用片仮名
- 鼻濁音表記用の平仮名・片仮名など
- 漢字(第3・第4水準)
- 符号化方式
- 符号化方式をめぐる論議 ――規定か,参考か
- 2004年改正の影響 ――表外漢字字体表と例示字形
- Unicodeとの対応関係 ――表外漢字UCS互換
- ソフトウェアのJIS X 0213対応状況
3.6 ISO/IEC 8859シリーズ ――欧米で広く使われる1バイト符号化文字集合
- ISO/IEC 8859(シリーズ)の概要
- Latin-1 ――ISO/IEC 8859-1
- ノーブレークスペース(NBSP)とソフトハイフン(SHY)
- Latin-2 ――ISO/IEC 8859-2
- その他のパート
3.7 UnicodeとISO/IEC 10646 ――国際符号化文字集合
- UnicodeおよびISO/IEC 10646(UCS)の概要
- 符号の構造 ――UCS-4,UCS-2,BMP
- Unicodeの符号位置の表し方
- 基本多言語面(BMP)
- その他の面
- 結合文字 ――1文字が1符号位置ではない
- 既存の符号化文字集合との関係
- Unicodeにおける文字名の定義 ――各文字に一意な名前を与える
- ISO/IEC 8859-1との関係
- 全角・半角形
- Column ちょっと気になるUnicodeの文字名
- 漢字統合 ――CJK統合漢字
- 互換漢字
- JIS X 0213との関係 ――プログラムで処理する上での注意点
- Column UnicodeとUTF-8とUCS-2の関係
第4章 代表的な文字符号化方式
4.1 JIS X 0201の符号化方式
- JIS X 0201の符号化方式の使い方
- 8ビット符号
- 7ビット符号
4.2 JIS X 0208の符号化方式
- JIS X 0208で定められた符号化方式
- 漢字用7ビット符号
- 符号の構造
- 漢字用7ビット符号の特徴
- 適した用途
- EUC-JP
- 符号の構造
- EUC-JPの特徴と注意
- 重複符号化の問題
- 適した用途
- ISO-2022-JP
- 符号の構造
- 符号の性質
- 適した用途
- Shift_JIS
- 符号の構造
- Shift_JISの計算方式
- Shift_JISの問題点
- 重複符号化の問題
- 適した用途
- 機種依存文字付きの変種
4.3 Unicodeの符号化方式
- UTF概説
- UTF-16
- 符号の構造
- サロゲートペア
- UTF-16の計算方法
- UTF-16のバイト順の問題 ――ビッグエンディアンとリトルエンディアン
- BOM(バイト順マーク)
- 適した用途
- UTF-32
- 符号の構造
- UTF-32の特徴
- 適した用途
- Column Unicodeの文字データベース
- UTF-8
- 符号の構造
- ASCIIとの互換性 ――UTF-8の特徴
- 冗長性の問題
- BOM付きUTF-8の問題
- CESU-8とModified UTF-8
- 適した用途
- Column HTMLのルビタグとUnicodeのルビ
第5章 文字コードの変換と判別
5.1 コード変換とは
- なぜ変換が必要か
- 変換のツール
- iconv
- nkf
- Column kf
- 変換の原則
- 異なる文字集合体系の間の変換の問題
- コード変換と文字変換
5.2 変換の実際 ――変換における考え方
- コード変換の処理方法
- アルゴリズム的な変換
- JIS X 0208の符号化方式の変換
- JIS X 0201とASCIIの違いの問題 ――Shift_JISの0x5C,0x7E
- Unicodeの符号化方式の変換
- テーブルによる変換
- JIS X 0208とUnicodeの間の変換
- JIS X 0208とASCII/JIS X 0201の間の変換
- 変換の必要性 ――使い勝手の向上のために
5.3 文字コードの自動判別
- 自動判別の例
- 判別のツール ――nkf,kcc
- なぜ自動判別できるか
- BOMによる判別
- エスケープシーケンスによる判別
- バイト列の特徴を読む ――EUC-JPとShift_JISの判別例
- 自動判別を助けるテクニック
- 自動判別の限界
5.4 まとめ
- Column 常用漢字表の改正と文字コード
第6章 インターネットと文字コード
6.1 電子メールと文字コード
- メールの基本はASCII ――日本語は7ビットのISO-2022-JPで
- MIME
- メールを多言語に拡張する
- charsetパラメータで文字コードを指定する
- charsetパラメータの値
- 誤ったcharset指定
- Column character setという用語
- テキストをさらに符号化する
- Content-Transfer-Encodingフィールド
- quoted-printable
- base64
- ヘッダの符号化 ――B符号化とQ符号化
- nkfによる復号
- 添付ファイル名の符号化
- 添付ファイル名のトラブルの原因
- 添付ファイル名の文字化けへの対処法
- 日本語メールの符号化の現在とこれから
- 現在
- これから
6.2 Webと文字コード
- HTML
- HTMLで用いる文字
- SGMLとしての背景
- HTMLの文字参照
- 文字コードの指定方法 ――head要素の中のmeta要素
- lang属性の影響
- CSS
- 文字コードの指定方法
- Unicode文字の参照
- XML
- XMLで用いる文字
- XMLの文字参照
- 文字コードの指定方法
- URL
- URL符号化
- HTTP
- HTML文書内部の文字コード指定が抱える問題点
- HTTPヘッダによる文字コードの指定
- Webサーバにおける設定
- HTTPヘッダの確認方法
- CGI
- フォームから入力されるテキストの文字コード
- 送信用の文字コードで符号化できない文字の扱い
6.3 まとめ
- Column ファイル名の文字コードの変換 ――Linux環境の例
第7章 プログラミング言語と文字コード
7.1 Java ――内部処理をUnicodeで行う
- Javaにおける文字はすべてUnicode
- Javaの文字列と文字
- StringクラスとCharacterクラスとchar型
- ソースコードの中の文字
- Unicodeエスケープ
- JavaはUnicodeを知っている
- サロゲートペアにまつわる問題 ――char単位で文字を扱うメソッド
- サロゲートペアへの対応 ――charからintへ
- 入出力における文字コード変換
- Reader/Writerクラスによる変換
- 文字コードを指定した入出力 ――InputStreamReader/InputStreamWriterクラス
- Javaで扱える文字コード
- プラットフォームのデフォルトの文字コードを得る
- プロパティファイルの文字コード
- native2ascii
- プロパティエディタ ――プロパティファイル編集用のツール
- XML形式のプロパティファイル
- JDK 6におけるPropertiesクラス
- リソースファイル ――プロパティファイルを国際化のために用いる
- JSPと文字コード
- pageディレクティブによる指定
- Windowsの場合の問題 ――MS932変換表とSJIS変換表
- 3つの対処法 ――入力/出力におけるUnicode変換の食い違いを解消する
- 文字コード変換器の自作方法
- ソートの問題 ――テキスト処理(1)
- 文字コードによるソート順
- 文字コード順以外によるソートの必要性 ――言語や国を考慮する
- Collatorクラスの使用
- CollationKeyによる性能改善
- 自然な区切り位置の検出 ――テキスト処理(2)
- 何が問題か ――Javaのcharと,結合文字やサロゲートペア
- BreakIteratorクラス ――適切な区切り位置を検出する
7.2 Ruby 1.8 ――シンプルな日本語化
- バージョン1.8までのRubyは,ASCIIが基本
- Ruby 1.8の文字列
- 文字列の長さ
- バイト列としての操作
- 文字列の操作
- 文字列の比較とソート
- jcodeによる複数バイト文字対応
- 文字コードの指定
- 指定方法 ――-Kオプション,$KCODE
- 正規表現のマッチング ――文字コードの指定を適切に行う
- $KCODEによる違い
- 正規表現ごとの文字コード指定
- 文字列を文字単位に切り分けるイディオム
- 文字コードの指定を間違うと何が起こるか
- JIS X 0213を使う
- コード変換ライブラリ
- NKF
- Kconvクラス
- Iconvクラス
7.3 Ruby 1.9 ――CSI方式で多様な文字コードを処理
- 拡張されたRuby 1.9の文字関連処理
- スクリプトの文字コードの指定 ――マジックコメント
- Ruby 1.9の文字列
- 自分の符号化方式を知っている
- 文字列の連結
- Unicodeエスケープ
- 文字単位の操作
- 文字列の長さ
- Unicodeの結合文字やサロゲートの扱い
- 入出力の符号化方式 ――IOクラス
- 入出力における文字コードの指定
- Encodingクラス
- Ruby 1.9のコード変換
- String#encodeメソッド
- 挙動の制御
- 変換できない文字の扱い ――挙動の制御(1)
- XMLのメタ文字のエスケープ ――挙動の制御(2)
- Encoding::Converterクラス
7.4 まとめ
- Column 機種依存文字における重複符号化
第8章 はまりやすい落とし穴とその対処
8.1 トラブル調査の必須工具 ――16進ダンプツール
- データのバイト値を検査する
- od ――16進ダンプのツール
- その他のツール ――hd,xxd
8.2 文字化け
- 文字化けを自分で起こしてみて理解する
- Shift_JISのテキストをEUC-JPやUTF-8で表示して化ける
- Shift_JISのテキストをGB2312やEUC-KRで表示して化ける
- ラベルと本体の不一致による文字化け
- 機種依存文字に起因する文字化け
- 文字化け防止の原則
8.3 改行コード
- 改行コードに起因するトラブル
- 1つのファイル中の混在
- 想定外の改行コードの使用
- 改行コードの変換
- nkfコマンドによる改行コードの変換
- trコマンドによる対応
8.4 「全角・半角」問題
- 「全角・半角」で何が問題になるのか
- 問題の本質
- 区別のはじまり ――かつての機器のテキスト表示の制約条件
- 用語の本来の意味 ――印刷用語の全角・半角
- 文字コードは「全角・半角」を決めていない ――1バイトの「A」,2バイトの「A」
- 「(いわゆる)全角・半角」の存在は便利なのか
- 「全角・半角」問題への対応 ――利用者に「全角・半角」を意識させない
- 求められる文字入力プログラム ――文字コードにおける一意な符号化という原則
- 入力文字の検証 ――アプリケーション側の対処法(1)
- 重複符号化された文字の同一視 ――アプリケーション側の対処法(2)
8.5 円記号問題
- 円記号問題とは何か
- ASCIIとJIS X 0201の違い
- 円記号問題の顕在化
- Webブラウザ上の表示
- Unicodeとの変換による問題 ――単なる表示上の問題では済まなくなる
- 対処のための注意点
- EUC-JPの場合
- 文字入力の際の注意
- チルダとオーバーラインについての注意
- 円記号問題は解決できるか
- 問題の本質 ――0x5Cの意味の違いを厳密に運用する
- 解決のための思考実験
8.6 波ダッシュ問題
- 波ダッシュ問題とは何か
- 現象の例
- 波ダッシュとは
- チルダとは
- 問題の原因 ――WAVE DASHとFULLWIDTH TILDE
- 変換の妥当性を検証する ――JISの1区33点とU+301Cの対応付け
- Windowsの実装
- 三つの対処案
- (1)Unicodeに変換しない
- (2)コード変換を揃える
- (3)Unicode間で変換する
- 波ダッシュ以外の文字 ――変換による問題が発生しがちな文字
8.7 まとめ
Appendix
A.1 ISO/IEC 2022のもう少しだけ詳しい説明
- 符号化文字集合のバッファ
- 指示と呼び出し
- 94文字集合と96文字集合
- エスケープシーケンス
- 符号化方式の実際
- EUC-JP
- ISO-2022-JP
A.2 JIS X 0213の符号化方式
- 既存の資産を活かしつつJIS X 0213の利点を亨受するために
- 漢字用8ビット符号
- 適した用途
- EUC-JIS-2004
- 「国際基準版・漢字用8ビット符号」との関係
- 適した用途
- ISO-2022-JP-2004
- 包摂規準の変更による旧規格使用の制限
- 適した用途
- Shift_JIS-2004
- 適した用途
A.3 諸外国・地域の文字コード概説
- 中国 ――GB 2312とGB 18030
- GB 2312
- GB 18030
- 韓国 ――KS X 1001
- 北朝鮮 ――KPS 9566
- 台湾 ――Big5とCNS 11643
- Big5
- CNS 11643
- 香港 ――HKSCS
- ロシア ――KOI8-R
A.4 Unicodeの諸問題
- 正規化 ――いつのまにか別の文字に変わる?
- 問題
- 正規化
- NFKC,NFKD
- 正規化によって別の文字に移される文字
- 日本語環境への影響
- 互換漢字の扱い
- Javaにおける正規化
- ファイル交換の際のトラブル
- 器問題 ――統合漢字と互換漢字の複雑な関係
- 拡張B ――日本風,台湾風の器
- Webブラウザの表示例
- 異体字セレクタ ――「正しい字体」への欲求
- 文字コードは文字の形を抽象化する
- 異体字を指定する
- IVS
- プログラム上の対処
- 絵文字の標準化
- 携帯絵文字の現状
- Unicodeへの絵文字取り込みの狙い
- 漢字統合との類似性
- 絵文字変換の問題
- 収録レパートリーの問題
- 書字方向の制御によるファイル名の偽装
- 右から左に書く文字
- ファイル名の偽装
- Windowsにおける対策
A.5 EmacsとSKKによるJIS2004の活用 ――本書執筆の舞台裏
- 入力環境
- EmacsとSKKの対応経緯
A.6 規格の入手・閲覧方法ならびに参考文献
- 参考文献