文字コードについて - ele.kochi-tech.ac.jp–‡字コード.pdf ·...
TRANSCRIPT
文字コードについて
文字コードとは
• 0,1のビットパターンと文字を対応づけるための規則–(誰かが決めた)約束事
字体(グリフ)と字形(フォント)
•文字と文字は同じ字体だが異なる字形–グリフを表示するためにはフォントが必要
文字コード
• 文字コードは0,1のパターンと字体を対応づける– 1対1対応• 文字列の比較、検索に必要
BCD
• Binary Coded Decimal– 0から9の数字に割り当てられたコード– 0 : 0000 à 9 : 1001– 1byteで2桁の数字を表す
EBCDIC
• Extended Binary Coded Decimal Interchange Code– IBMが使い始めた(大型)計算機用の文字コード
– 1byte 1文字:BCDの拡張• 0 : 00000000 à 9 : 00001001
–使われていないところに英字、記号を割り当てる
–かな文字含むEBCDIKというのもある
Punch Card
• 1980年代の初め頃までは使われていた。• マークシートのカード。
ASCII (1)
• American Standard Code for Information Interchange– 00 à 7F : 制御コード、数字、英文字、記号
7bit または MSBを0とした8bit
情報通信のためのコードからつくられているので、改行、紙送りなどの制御コードが含まれる
制御コード
SP
DEL
94文字
テレタイプ端末 ASR-33
ASCII (2)
• ASCIIはアメリカ英語のためのコード• 例:通貨記号は$だけ–イギリスでは£が必要
• 英語以外の言語では各種のアクセント記号が必要–フランス語、ドイツ語、スペイン語、イタリア語などアクセント記号が異なる
–言語別、国別に対応したコードが作られた
ASCII (3)
23 : #24 : $40 : @5Bà5E : [\]60 : `7B à 7E { | } ~
国際規格
国別、言語別に異なる記号を入れる例 UK 23 : £日本 5C : ¥
7E : ‾ (オーバーライン)
ラテンアルファベットと異なる文字の場合は、94文字の配置は自由
JISコード JIS X0201
• JIS X0201 ラテン文字集合• JIS X0201 片仮名文字集合–いわゆる「半角カナ」
1文字8bitで表す
GL:ラテン文字集合GR:片仮名文字集合
濁点、半濁点は別の文字として扱う
GRGL
94文字 94文字
ISO/IEC 8859 Latin-x• GL ASCII, GR ASCIIに含まれない文字• 複数の言語を1バイトで表せる• 言語の組み合わせでLatin-1~Latin-16
ASCII ASCIIに含まれない文字
94文字 94文字
1文字8bitで表す
複数の言語を扱うには• 文字の前に制御文字列を置き、94文字単位で入れ替える– ISO/IEC 2022-XX– ESC(1B) XX XX (文字セットの指定)–エスケープシーケンス
• 欠点:–先頭から読まないと文字を確定できない–文字数とバイト数が一致しない
漢字はどうする?• JIS X0208– 文字セットと符号化方式は別に考える
• 2バイトで94×94の表を表現する– 94×94=8836(文字)–区点表とも呼ばれる
漢字はどうする?
• 日本語に混ぜて使われるラテン文字、ギリシャ文字、キリル文字やいろいろな記号もコード化–濁点「゛」、半濁点「゜」のついた文字としてコード化
JISコード• X0208 第1水準、第2水準 6879文字– (97JIS)
• X0212 補助漢字 6067文字• X0213 第3水準 8797文字
第4水準 2436文字– X0212以降は面を追加– X0213第3水準はX0208に文字を追加したものなので、あわせて17300文字
• 改訂は文字(字体)を増やすだけでなく、異字体の範囲に関する規則が追加されたりしている
外字/機種依存文字• 外字–ユーザーやプログラムが使われていない区点に独自に割り当てた字体
• 機種依存文字–使われていない区点にメーカー独自に割り当てた字体
外字/機種依存文字• 異なるメーカーの機器間で異なる字体が割り当てられているので文字化けの原因となる
• 人名、地名などで使われる漢字が登録されることが多かった
Shift-JIS• ASCIIとJISコードを混ぜて使用するための規則(符号化規則)
• Shift-JIS JIS X0201片仮名の使われていない部分と次の1バイトでJISの区点を表現–第1バイト 80à9F,E0àEF–第2バイト 40à7E,80àFC–GLはラテン文字(ASCIIではない)
Shift-JIS
• 元々X0201にある文字は半角で表示• 元々X0208にある文字は全角で表示–いわゆる全角文字、半角文字
• 全角、半角は活字の横幅を表していた
EUC-J
• ASCIIとJISコードを混ぜて使用するための規則(符号化規則)
• 8ビット目:0 ASCII• 8ビット目:1 2バイトコード• 8E:直後1バイトをX0201片仮名にする• 8F:直後2バイトをX0201補助漢字とする
Shift-JISとEUC-Jの比較• Shift-JIS– MS japanとNECが考案– X0201以降の文字セットには対応出来ない
• EUC-J– AT&TがUNIXのために考案– 処理が単純、多言語化できる
• Shit-JIS,EUCともに現在ではあまり使われない
漢字の扱い• 漢字を使うのは日本語だけではない• 中国 大陸、台湾は別の文字• 韓国、ベトナム(昔は使っていた)• 字体はそれぞれ別• 統一したコードを作ろうとしたがうまくいかなかった
• 漢字以外でも94文字で収まらない文字集合をつかう言語はいっぱいある
Unicode (1)
• ASCIIとかLatin-1とかとは全く関係なく、世の中のすべての言語を表現できる文字集合をコード化するのが目的
• 10万字以上が登録されている
Unicode (2)
•中国、日本、韓国の字体を統合して扱えば16ビットあれば十分であると考えた–CJK Unification
Unicode (3)
•実際にはうまくいかず、32ビットになった
Unicode (4)
• Universal Multiple-Octet Coded Character Set (UCS)– ISO/IEC 10646 (JIS X0221)–UCS-4–UCS-2
Unicode (5)
• UCS-4 4byte 231個の文字を表現可能–Group(群)、Plane(面�、Row(区)、
Cell(点)の組み合わせで文字を特定
• UCS-2 2byte Group 00 Plane 00– Basic Multilingual Plane (BMP)–大半の文字はBMPに入っている
Unicode (6)
• ����� UTF– UTF-32 計算機内部では32bitで扱う– UTF-8 漢字は2から3バイト
• UTF-8– 00~7F 1byte(7bit)– 0080~07FF 2byte(11bit)– 0800~FFFF 2byte(16bit)– 010000~10FFFF 3byte(21bit)
Unicode (7)
• CJK漢字統合 日本、中国、台湾、韓国の漢字を1つに統合–字体の違う字を1つにまとめているので一部問題有り
– ISO/IEC 2022-XXとの相互変換が完全ではない
• フォントがなければ、文字コードとして対応出来ていても表示できない
文字化け• 文字コードが異なる
• フォントがない
• 外字、機種依存などで対応がとれていない
文字化けWebページの先頭
<meta http-equiv=“Content-Type” content="text/html; charset=UTF-8" />
ページがUTF-8で書かれていることを示す(先頭部分はASCIIが使われる)
文字化け• 文字指定がなかったら?–ブラウザのデフォールト指定のコード–ブラウザにより暗黙のコードは異なる
• 指定されたコードでないコードが使われていたら?
• 対応するフォントがない文字は?
対応するフォントがない可能性のある文字
• 人名などで使用される旧字体、異字体–髙 「はしご高」–﨑 「崎」–濱 「浜」–異字体はたくさんある
– Unicodeには登録されているが、対応するフォントがないシステムもある