狠狠撸

狠狠撸Share a Scribd company logo
文字コードの基础
Agenda
1. 文字コードの歴史
2. 文字コードの注意点

3. もし文字化けしたら
文字コードの歴史
日本語文字コードの種類

ISO-2022-jp (JIS)

Shift-JIS
EUC-JP
Unicode
种类が多いですね???
なぜ、そんなに派生がある
の?
1990以前は文字コードは
ASCIIってやつしか無かった。
ASCIIは7ビット文字で
128個しか表現できない。
コード範囲(16進) 内容
0x00~0x1F 制御文字(control characters)
0x20
空白(SP)
0x21~0x7E 図形文字(graphic characters)
0x7F
制御文字DEL(delete)
漢字って何種類あるんだっ
け?
128文字?
足りねぇじゃん!!
そこで、1990年ごろ
JISという文字コードが作られま
した。
JISというのは???
ASCIIでは7ビットしかねぇか
ら、2バイトにしちゃえば、よく
ね?

2バイト文字の誕生です!
別名でISO-2022-jpって言われているやつです
ね。
しかし、JISにも問題
が???
JISはカタカナとか漢字とか
の文字コード範囲が被って
る。
コード範囲(16進) 内容
0x00~0x1F、0x7F 制御コード
0x20~0x7E
ASCII文字
0x21~0x5F
半角カタカナ
0x2121~0x7E7E
漢字 ( 第1バイト?第2バイトとも 0x21~
0x7E )
0x2121~0x7E7E
補助漢字 ( 第1バイト?第2バイトとも 0x21~
0x7E )
見事に被ってますね!
あれ?だめじゃね?
解決するために、エスケープ
文字を準備しました!

コードの範囲が被っているんで、1つの文字の先頭と最後に区切りを入れています。
※ASCIIとの互換を保つために、ASCIIと同じ文字コードの場合は区切り文字は入らない
例:[日本語START]こ[日本語END][半角カタカナSTART]?[半角カタカナEND]
じゃーいいじゃん
いや、ダメなんです。
エスケープが1つでも欠損する
と全部文字化けする可能性があ
る。
JISは必ずエスケープで始まりエ
スケープで終わるのが前提!
でも、途中でエスケープが無く
なると、文字化けしちゃう/
(^o^)\

[日本語START]こ[日本語END][半角カタカナSTART]?[半角カタカナEND]
がもし
[日本語START]こ[半角カタカナSTART]?[半角カタカナEND]
で、[日本語END]が無かったら、残りの文字コードは全て日本語扱いになってしまい、
残りの全部文字化けしてしまう。
他にも、エスケープが入ること
により、文字コードの数が増え
るため、処理が遅くなってしま
う。
そこで、解決するために誕
生したのが???
Shift-JIS
EUC-JPもありますが、無視します。
Shift-JISは1バイトを8ビットに
して1つ繰り上げて文字コード
が被らないようにしました。
1 バイト目
文字の種類
0x00~0x1F、0x7F
制御コード
0x20~0x7E
ASCII文字
0xA1~0xDF
半角カタカナ
0x81~0x9F、0xE0~0xFC

2 バイト目

0x40~0x7E、0x80~0xFC

漢字
???さすがMicrosoft
天才の降臨です。
あの問題が無ければの話で
すが???
有名な5颁问题です。
なぜか2バイト目に「5C」を
使ったのかっ!
お前のせいでエスケープし
なきゃならないんだっ!
5C問題とは、
ASCIIと「5C」はバックスラッ
シュなので、多くのプログラム
言語ではエスケープに扱いに
なってしまいます。???あと
は分かるな
ちゃんと回避してあげま
しょ
基本的には文字列の後ろにバック
スラッシュをつけます。
「表」のような感じです。

面倒臭ければ
「magic_quotes_gpc」で全部エ
スケープって事もできます。
ISO-2022-JP (RFC 1468、俗に「JIS コード」と呼ばれる文字コード。JIS X 0208 対
応)
ISO-2022-JP-1 (RFC 2237、JIS X 0208 と JIS X 0212 に対応)
ISO-2022-JP-2 (RFC 1554、多言語拡張。JIS X 0208、JIS X 0212、GB 2312、KS X
1001、ISO/IEC 8859-1、ISO/IEC 8859-7 対応)
ISO-2022-JP-3 (JIS X 0213:2000 対応)
ISO-2022-JP-2004 (JIS X 0213:2004 対応)
ISO-2022-CN (RFC 1922、GB 2312、CNS 11643 [第一字面?第二字面]対応)
ISO-2022-CN-EXT (RFC 1922、GB 2312、ISO-IR-165、CNS 11643 [第一字面から
第七字面]対応)
ISO-2022-KR (RFC 1557、KS X 1001 対応)
EUC-JP (JIS X 0208 対応)
EUC-JISX0213 (JIS X 0213:2000 対応)
EUC-JIS-2004 (JIS X 0213:2004 対応)
EUC-KR (RFC 1557、KS X 1001 対応)
GB2312 (別名 EUC-CN。GB 2312 対応)
GBK (Microsoft Windows Codepage 936 対応)
GB18030 (GB 18030 対応)
EUC-TW (CNS 11643 対応)
Shift_JIS (JIS X 0208 対応)
Shift_JISX0213 (JIS X 0213:2000 対応)
Shift_JIS-2004 (JIS X 0213:2004 対応)
Windows-31J (Microsoft Windows Codepage 932 対応)
x-Mac-Japanese (MacJapanese 対応)

ここから文字コードが乱立し
ていきます。
おいおいおい、お前ら勝手にや
り過ぎだし、国際化とか全然考
えてないだろ?
ということで、救世主登场
鲍罢贵-8(鲍苍颈肠辞诲别)
全世界文字を一つのコードで
表現出来ればいいよね!
でも、2バイトで足りるな?
とりあえず4バイトぐらいにし
とこ
鲍罢贵-8(鲍苍颈肠辞诲别)の誕生
UTF-8を2バイト文字とか言っちゃうと恥ずかしいことになります。
WEBプログラム組むときは
UTF-8だけでいいです。
新規に限りますが???
色々な文字コードの注意
事項。
础厂颁滨滨と日本语文字コード
実は、ASCIIの上位互換で、日
本語文字コードが作られてい
ます。
簡単に言うと、上位互換だから、
文字コードが違っても、プログラ
ムなどは動作します。(文字化け
はしますが)
しかし、
UTF16は何も動かないです。
Windowsの内部コードはUTF-16ら
しいので、メモ帳とかで
「Unicode」とか指定するとUTF16になっちゃいます。
(サクラエディタでもありますの
で気をつけて下さい。)
鲍罢贵-8の落とし穴
プログラムにBOMが入る
と色々と問題が起きる。
http://fusigidane.seesaa.net/article/129173506.html
Unicodeとかの判定などで使
われるけど、本来UTF-8には
BOMは使われない。
(どっちかというとUTF-16
に使用される。)
普通だったらBOMなんぞ
入らない。
でも???
Windowsの内部コードっ
てなんでしたっけ?
鲍罢贵-16でしたよね?
そうですね。
Windowsのメモ帳です
ね。
メモ帳で「UTF-8」で設定し
てもBOMありになります。
Windowsのメモ帳は禁止で
す。
そもそもWindowsのメモ帳で開発するやつを見てみたい。
他にも「?」とかの問題
点もありますが、
自分で調べて下さい。
メール
メールの標準は
ISO-2022-JP(JIS)です。
最近はUFT-8とかにも対応してき
てますが、めっちゃ古いメールク
ライアント使ってる場合は化けし
ます。
可能な限りISO-2022-JPがいいか
もしれません。
奥贰叠开発で文字化けした时の対処
1.まず、エディタを怪しめ
大体5割が原因です。
必ず文字コードを合わせま
しょう。
BOMが入ってないか?とかも
見たほうがいいですね!
2.サーバーを怪しめ
もしかしたらApacheの文字コード
が変わってるかもしれません。
3.顿叠を怪しめ
新規開発だと結構やっちゃいま
す。
ちゃんとDBも文字コードを合わせ
ましょう。
4.プログラムを怪しめ
実は自分がハマった事があるんで
す。。。
ライブラリが、UTF-8対応じゃな
くて半日ぐらいハマりました。

More Related Content

文字コート?勉强会