遍照金剛

アクセスカウンタ

zoom RSS 文字化け=文字変換

<<   作成日時 : 2010/02/19 20:52   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 1 / コメント 0

 「プログラマのための文字コード技術入門」(矢野 啓介 著/技術評論社 刊)という本が、まだ書棚に飾られる前で、書籍が店員の利用する机の上に積んであったので、抜き出して読んでみました。

 いつになっても、文字、文字コードというのは煩雑で、また、色々な規格の体系があるので、混乱の収まらない領域となっています。

 この本は、基礎編と応用編というような形で、順序良く、文字コードの由来と問題点、解決策を記述しており、題名にあるように、プログラムで文字コードを扱う人には、役立ちそうな本ではないかという気がしました。

 読んでいて、日本語の1バイトの文字規格JIS X 0201とASCIIコードとの比較で、「オーバーラインとチルダ、円記号とバックスラッシュ」との関係を論じるときに、文字化けという現象が文字変換の一種であるというようなことが書いてあり、そう言われれば、まさしくそうだなぁと、別の視点からの見方に納得してしまいました。

 適宜サンプルの変換方法も記載されており、よくまとまって使いやすいように思いました。

 目次は、出版社のホームページより抜粋すると、以下のようになっています。

第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 規格の入手・閲覧方法ならびに参考文献
参考文献

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
なるほど(納得、参考になった、ヘー)

トラックバック(1件)

タイトル (本文) ブログ名/日時
JIS X 0208の改正と混乱
JIS X 0208は、1983年に改正され83JISとなったが、多くの字体の簡略化と符号位置の入れ替えが行われ、パソコンが違うと表示される字形が異なるという問題を引き起こした。その後、90JIS、97JISと、合計3回の改正が行われた。 ...続きを見る
ぱふぅ家のホームページ
2017/02/18 18:16

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文
SHARPER IMAGE イオニックブリーズMIDI レッド
SHARPER IMAGE イオニックブリーズMIDI レッド
文字化け=文字変換 遍照金剛/BIGLOBEウェブリブログ
文字サイズ:       閉じる