文字コード入門 理論編 クイズ付き

3,009 views

Published on

社内勉強会「文字コード入門」で使った資料です。
文字集合(Character Set)と文字エンコーディング(Character Encoding Scheme)の関係、よく使う文字エンコーディングの特徴などを取り上げました。

Published in: Technology
2 Comments
6 Likes
Statistics
Notes
  • ご指摘ありがとうございます。
    お恥ずかしながら知らなかった部分もあり、勉強になります。
    (p12とp26は入門用と言うことで端折りました)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 資料公開感謝します。読んでいて気になった点をコメントします。
    p.11 UCS-2は廃止されたはず……
    p.12 JIS X 0212とJIS X 0213は包含関係ではない。第四水準漢字でもBMP(旧UCS-2)内の文字があるはず……
    p.13 EUC-JPは1~3バイト
    p. 20 ISO-2022-JPはASCII互換では?(Shift_JISは厳密にはASCII互換ではない)
    p.26 UTF-9のRFCは存在する(ジョークRFCではあるが)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,009
On SlideShare
0
From Embeds
0
Number of Embeds
732
Actions
Shares
0
Downloads
18
Comments
2
Likes
6
Embeds 0
No embeds

No notes for slide

文字コード入門 理論編 クイズ付き

  1. 1. 文字コード入門 理論編 2013/07/30 baba@BPS クイズ付き
  2. 2. 本資料について • 本資料は、社内勉強会で使った資料です – 外部向けに書かれていない記述がある可能性 があります – 正確な解説を省いている箇所があります • 本資料の取り扱いについて – 再配布等のご相談はbaba@bpsinc.jpまでお願 いします。
  3. 3. はじめに • 今回は文字コードの用語解説と基礎知識の話 です • 話さないこと – RubyやJavaやCでどのように書けば良いか、と いった実装の話 – 文字コード変換、文字化けに関する話 – フォントに関する話 – Unicodeの細かい話 – バイナリな話 • 後半にクイズがあります
  4. 4. 目次 • 文字集合と文字エンコーディング – 文字集合 – 符号化文字集合 – 文字符号化形式 • クイズ • ちょっとUnicodeの話
  5. 5. 文字集合と文字エンコーディン グ 用語を理解しよう
  6. 6. 文字集合と文字エンコーディン グ • 文字集合 – Character Set • 符号化文字集合 – Coded Character Set • 文字符号化方式 – Character Encoding Scheme • 符号点 – Code Point ※”charset”は文字集合ではない
  7. 7. 文字集合と文字エンコーディン グ a あ 𠮟 Unicode Code Point U+61 U+3042 U+209BF JIS X 0208 Code Point 3区65点 ※例示字体は全角 4区2点 - ASCII 0x61 - - Shift_JIS 0x61 0x82A0 - UTF-8 0x61 0xE38182 0xF0A0AE9F UTF-16 0x0061 0x3042 0xD842 0xDF9F UTF-32 0x00000061 0x00003042 0x000209BF
  8. 8. 文字集合 • 数字 – 0-9の10文字 • ラテン文字 – A-Z大文字小文字の52文字 • ひらがな、カタカナ • ギリシア文字 • 記号 • 漢字
  9. 9. JISの文字集合 • 非漢字 – 数字、ラテン文字、記号など 約500文字 • 第一水準 – 常用漢字のほぼすべて、人名用漢字、その他日常的に使う 漢字 約3,000文字 • 第二水準 – 動植物名漢字など 約3,300文字 • 第三水準 – あまり使わない漢字 約1,200文字 – でも常用漢字が含まれている • 第四水準 – あまり使わない漢字 約2,400文字
  10. 10. 符号化文字集合 • JIS X 0208 – JIS第一、第二水準を含む約6,000文字 • JIS X 0212 – JIS X 0208に含まれない補助漢字約6,000文字 • JIS X 0213 – JIS X 0213:2000 • JIS第一~第四水準漢字などを含む約12,000文字 – JIS X 0213:2004 • 例示字体の変更(1点しんにょう→2点しんにょう) • 文字の追加 – JIS X 0213:2012 • 情報漢字表改定に伴うマイナーチェンジ
  11. 11. 符号化文字集合 • UCS-2 – Unicode 0面 • BMP (Basic Multilingual Plane) – U+0 ~ U+FFFF • 65536文字分 • UCS-4 – Unicodeで扱うすべて – U+0 ~ U+10FFFF • 約111万文字分
  12. 12. 符号化文字集合 ラテン文字 第一水準漢字 第三水準漢字 第二水準漢字 第四水準漢字 数字 記号 ひらがな/カタカ ナ ISO 646 UCS2 JIS X 0208 JIS X 0213 ハングル ギリシア文字 キリル文字 ヘブライ文字 ルーン文字 モンゴル文字 顔文字 古代文字 麻雀牌 錬金術記号 UCS4 JIS X 0212
  13. 13. 文字符号化方式 • ISO646 – 7bitで英数字を表現(ASCIIコード) • Shift_JIS – 1~2バイトで日本語を表現 – 日本語Windowsでよく使われる(実際はCP932のことも多い) • EUC-JP – 1~2バイトで日本語を表現 – 日本語Linuxでよく使われる • ISO-8859-1 – 8bitでASCII+αを表現する(latin-1) – 欧米でよく使われる • ISO-2022-JP – 7bitでエスケープシーケンスを使って日本語を表現 – ステートフルなエンコーディング – 日本語メールでよく使われる
  14. 14. 文字符号化方式 • UTF-8 – Webでよく使われる • UTF-16 – UCS-2とBMP内で対応 – Java, Windows, Pythonなどの内部文字コード • UTF-32 – UCS-4と対応 – ユーザレベルではあまり使わない
  15. 15. クイズ
  16. 16. この文字エンコーディングは? • Amazonで日本語商品を表示した • どれでしょう – Shift_JIS – UTF-8 – UTF-16 – Unicode Code Point • 標準仕様?Webサイト依存?ブラウザ依存?
  17. 17. 7bit文字エンコーディングはどれ? • ISO646 (ASCII) • Shift_JIS • EUC-JP • ISO-8859-1 • ISO-2022-JP • UTF-8 • UTF-16 • UTF-32
  18. 18. 7bit文字エンコーディングはどれ? • ISO646 (ASCII) • Shift_JIS • EUC-JP • ISO-8859-1 • ISO-2022-JP • UTF-8 • UTF-16 • UTF-32
  19. 19. ASCII互換エンコーディングはど れ? • Shift_JIS • EUC-JP • ISO 8859-1 • ISO-2022-JP • UTF-8 • UTF-16 • UTF-32
  20. 20. ASCII互換エンコーディングはど れ? • Shift_JIS • EUC-JP • ISO 8859-1 • ISO-2022-JP • UTF-8 • UTF-16 • UTF-32
  21. 21. バイト数から文字数を求められる のは? • ISO646 (ASCII) • Shift_JIS • EUC-JP • ISO 8859-1 • ISO-2022-JP • UTF-8 • UTF-16 • UTF-32 ※改行やBOM、制御文字などは気にしない
  22. 22. バイト数から文字数を求められる のは? • ISO646 (ASCII) • Shift_JIS • EUC-JP • ISO 8859-1 • ISO-2022-JP • UTF-8 • UTF-16 • UTF-32 (コードポイント数は求められ る)
  23. 23. UTF-8で1文字の最大バイト数 は? • 1バイト • 2バイト • 3バイト • 4バイト • 5バイト • 6バイト • 7バイト • 8バイト • 9バイト • それ以上
  24. 24. UTF-8で1文字の最大バイト数 は? • 1バイト • 2バイト • 3バイト • 4バイト (Unicode文字が割り当てられる範囲) • 5バイト • 6バイト (旧UTF-8の規格上) • 7バイト • 8バイト (実用上の最大バイト数) • 9バイト • それ以上 (合成用文字を使った場合)
  25. 25. 実際に標準に存在するのはどれ? • UTF-1 • UTF-4 • UTF-7 • UTF-9 • UTF-15 • UTF-64
  26. 26. 実際に標準に存在するのはどれ? • UTF-1 • UTF-4 • UTF-7 • UTF-9 • UTF-15 • UTF-64
  27. 27. ちょっとUNICODEの話
  28. 28. 群、面、区、点 • 古いUCS, UCS-4: 31bit – 7bitの群、8bitの面、8bitの区、8bitの点 – 32768 * 65536 * 65536 * 65536 =>21億文字分 – こんな使わなくね!? • 今のUCS, Unicode – 群は廃止、4bitの面、8bitの区、8bitの点 – 16 * 65536 * 65536 => 111万文字分
  29. 29. 面 • 0面 – BMP (Basic Multilingual Plane) – 基本多言語面 • 1面 – SMP (Supplementary Multilingual Plane) – 追加多言語面 • 2面 – SIP (Supplimentary Ideographic Plane) – 追加漢字面 • 3面 – 古代文字の予定 • 4-13面 – 用途未定 • 14面 – SSP (Supplimentary Special-purpose Plane) – 追加特殊用途面 • 15-16面 – 私用面
  30. 30. BOM (Byte Order Mark) • UTF-8 – 0xEF 0xBB 0xBF – 意味ない • UTF-16 – 0xFE 0xFF (big endian) – 0xFF 0xFE (little endian) • UTF-32 – 0x00 0x00 0xFE 0xFF (big endian) – 0xFF 0xFE 0x00 0x00 (little endian)
  31. 31. サロゲートペア • UTF-16でBMP以外を表現するときに必要 • Javaでcharは2byte – 1文字はchar1つで表現できない! – char String#charAt(int index) – int String#codePointAt(int index)
  32. 32. IVS (Ideographic Variation Sequence) • と を表示し分けたい – 葛飾区と葛城市の市民が納得しない • 3つの方法 – フォントを変える – 別のコードポイントを割り当てる – IVS • ベース文字 + 異体字セレクタ • IVD – Adobe-Japan1 – Hanyo-Denshi
  33. 33. 終わりに
  34. 34. まとめ • 自分が扱っている文字列が、どのようなバイ ト列になっているか、たまには意識しよう – デバッグ時に役立ちます • 実務で生かそう – 文字化けした!チェックポイントは? • 文字符号化方式の解釈が異なっている? • 文字集合に存在しない? • コードポイントが間違っている? • フォントに文字が入っていない? – Javaで1文字をcharで表現できると思わないでね • 今や常用漢字も表現できない • WindowsのTCHARも全く同じ
  35. 35. もっと詳しく知りたい人は 定番 超おすすめ ちょっと誤植多いけど IVSがよく分かる 読み物 標準化の裏側

×