文字コード勉強会

3,903 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,903
On SlideShare
0
From Embeds
0
Number of Embeds
684
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

文字コード勉強会

  1. 1. 文字コードの基礎
  2. 2. Agenda 1. 文字コードの歴史 2. 文字コードの注意点 3. もし文字化けしたら
  3. 3. 文字コードの歴史
  4. 4. 日本語文字コードの種類 ISO-2022-jp (JIS) Shift-JIS EUC-JP Unicode
  5. 5. 種類が多いですね・・・
  6. 6. なぜ、そんなに派生がある の?
  7. 7. 1990以前は文字コードは ASCIIってやつしか無かった。
  8. 8. ASCIIは7ビット文字で 128個しか表現できない。 コード範囲(16進) 内容 0x00~0x1F 制御文字(control characters) 0x20 空白(SP) 0x21~0x7E 図形文字(graphic characters) 0x7F 制御文字DEL(delete)
  9. 9. 漢字って何種類あるんだっ け?
  10. 10. 128文字?
  11. 11. 足りねぇじゃん!!
  12. 12. そこで、1990年ごろ JISという文字コードが作られま した。
  13. 13. JISというのは・・・ ASCIIでは7ビットしかねぇか ら、2バイトにしちゃえば、よく ね? 2バイト文字の誕生です! 別名でISO-2022-jpって言われているやつです ね。
  14. 14. しかし、JISにも問題 が・・・
  15. 15. JISはカタカナとか漢字とか の文字コード範囲が被って る。 コード範囲(16進) 内容 0x00~0x1F、0x7F 制御コード 0x20~0x7E ASCII文字 0x21~0x5F 半角カタカナ 0x2121~0x7E7E 漢字 ( 第1バイト・第2バイトとも 0x21~ 0x7E ) 0x2121~0x7E7E 補助漢字 ( 第1バイト・第2バイトとも 0x21~ 0x7E ) 見事に被ってますね!
  16. 16. あれ?だめじゃね?
  17. 17. 解決するために、エスケープ 文字を準備しました! コードの範囲が被っているんで、1つの文字の先頭と最後に区切りを入れています。 ※ASCIIとの互換を保つために、ASCIIと同じ文字コードの場合は区切り文字は入らない 例:[日本語START]こ[日本語END][半角カタカナSTART]ア[半角カタカナEND]
  18. 18. じゃーいいじゃん
  19. 19. いや、ダメなんです。
  20. 20. エスケープが1つでも欠損する と全部文字化けする可能性があ る。
  21. 21. JISは必ずエスケープで始まりエ スケープで終わるのが前提! でも、途中でエスケープが無く なると、文字化けしちゃう/ (^o^)\ [日本語START]こ[日本語END][半角カタカナSTART]ア[半角カタカナEND] がもし [日本語START]こ[半角カタカナSTART]ア[半角カタカナEND] で、[日本語END]が無かったら、残りの文字コードは全て日本語扱いになってしまい、 残りの全部文字化けしてしまう。
  22. 22. 他にも、エスケープが入ること により、文字コードの数が増え るため、処理が遅くなってしま う。
  23. 23. そこで、解決するために誕 生したのが・・・
  24. 24. Shift-JIS EUC-JPもありますが、無視します。
  25. 25. Shift-JISは1バイトを8ビットに して1つ繰り上げて文字コード が被らないようにしました。 1 バイト目 文字の種類 0x00~0x1F、0x7F 制御コード 0x20~0x7E ASCII文字 0xA1~0xDF 半角カタカナ 0x81~0x9F、0xE0~0xFC 2 バイト目 0x40~0x7E、0x80~0xFC 漢字
  26. 26. ・・・さすがMicrosoft 天才の降臨です。
  27. 27. あの問題が無ければの話で すが・・・
  28. 28. 有名な5C問題です。
  29. 29. なぜか2バイト目に「5C」を 使ったのかっ!
  30. 30. お前のせいでエスケープし なきゃならないんだっ!
  31. 31. 5C問題とは、 ASCIIと「5C」はバックスラッ シュなので、多くのプログラム 言語ではエスケープに扱いに なってしまいます。・・・あと は分かるな
  32. 32. ちゃんと回避してあげま しょ
  33. 33. 基本的には文字列の後ろにバック スラッシュをつけます。 「表」のような感じです。 面倒臭ければ 「magic_quotes_gpc」で全部エ スケープって事もできます。
  34. 34. 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 対応) ここから文字コードが乱立し ていきます。
  35. 35. おいおいおい、お前ら勝手にや り過ぎだし、国際化とか全然考 えてないだろ?
  36. 36. ということで、救世主登場
  37. 37. UTF-8(Unicode)
  38. 38. 全世界文字を一つのコードで 表現出来ればいいよね!
  39. 39. でも、2バイトで足りるな?
  40. 40. とりあえず4バイトぐらいにし とこ
  41. 41. UTF-8(Unicode)の誕生 UTF-8を2バイト文字とか言っちゃうと恥ずかしいことになります。
  42. 42. WEBプログラム組むときは UTF-8だけでいいです。 新規に限りますが・・・
  43. 43. 色々な文字コードの注意 事項。
  44. 44. ASCIIと日本語文字コード
  45. 45. 実は、ASCIIの上位互換で、日 本語文字コードが作られてい ます。
  46. 46. 簡単に言うと、上位互換だから、 文字コードが違っても、プログラ ムなどは動作します。(文字化け はしますが)
  47. 47. しかし、 UTF16は何も動かないです。
  48. 48. Windowsの内部コードはUTF-16ら しいので、メモ帳とかで 「Unicode」とか指定するとUTF16になっちゃいます。 (サクラエディタでもありますの で気をつけて下さい。)
  49. 49. UTF-8の落とし穴
  50. 50. プログラムにBOMが入る と色々と問題が起きる。 http://fusigidane.seesaa.net/article/129173506.html
  51. 51. Unicodeとかの判定などで使 われるけど、本来UTF-8には BOMは使われない。 (どっちかというとUTF-16 に使用される。)
  52. 52. 普通だったらBOMなんぞ 入らない。
  53. 53. でも・・・
  54. 54. Windowsの内部コードっ てなんでしたっけ?
  55. 55. UTF-16でしたよね?
  56. 56. そうですね。 Windowsのメモ帳です ね。
  57. 57. メモ帳で「UTF-8」で設定し てもBOMありになります。 Windowsのメモ帳は禁止で す。 そもそもWindowsのメモ帳で開発するやつを見てみたい。
  58. 58. 他にも「〜」とかの問題 点もありますが、 自分で調べて下さい。
  59. 59. メール
  60. 60. メールの標準は ISO-2022-JP(JIS)です。
  61. 61. 最近はUFT-8とかにも対応してき てますが、めっちゃ古いメールク ライアント使ってる場合は化けし ます。 可能な限りISO-2022-JPがいいか もしれません。
  62. 62. WEB開発で文字化けした時の対処
  63. 63. 1.まず、エディタを怪しめ
  64. 64. 大体5割が原因です。 必ず文字コードを合わせま しょう。 BOMが入ってないか?とかも 見たほうがいいですね!
  65. 65. 2.サーバーを怪しめ
  66. 66. もしかしたらApacheの文字コード が変わってるかもしれません。
  67. 67. 3.DBを怪しめ
  68. 68. 新規開発だと結構やっちゃいま す。 ちゃんとDBも文字コードを合わせ ましょう。
  69. 69. 4.プログラムを怪しめ
  70. 70. 実は自分がハマった事があるんで す。。。 ライブラリが、UTF-8対応じゃな くて半日ぐらいハマりました。

×