読者です 読者をやめる 読者になる 読者になる

こしごぇ(B)

旧:http://d.hatena.ne.jp/koshigoeb/

「プログラマのための文字コード技術入門」で勉強中(3)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

  • 文字符号化方式(character encoding scheme)
  • JIS X 0201
    • 8ビット符号
    • 7ビット符号
      • ラテン文字用7ビット符号
      • 片仮名用7ビット符号
      • ラテン文字・片仮名用7ビット符号
      • SHIFT-OUT(0x0E), SHIFT-IN(0x0F)
  • JIS X 0208
    • EUC-JP
    • ISO-2022-JP
    • Shift_JIS
    • 漢字用7ビット符号
    • 漢字用8ビット符号
    • 国際基準版・漢字用7ビット符号
    • 国際基準版・漢字用8ビット符号(EUC-JPの中核部分に相当するサブセット)
    • ラテン文字・漢字用7ビット符号
    • ラテン文字・漢字用8ビット符号
    • シフト符号化表現(Shift_JIS相当)
    • RFC1468符号化表現(ISO-2022-JP相当)
  • EUC-JP
  • ISO-2022-JP
  • Shift_JIS
    • JIS X 0201, JIS X 0208
    • SJIS, シフト符号化表現, MS漢字コード
    • JIS X 0201
    • 第1バイト: 0x81 - 0x9F, 0xE0 - 0xEF
    • 第2バイト: 0x40 - 0x7E, 0x80 - 0xFC
    • 第1バイト(S1)の計算
      • 1<=k<=62 のとき、S1 = (k - 1) ÷ 2 + 0x81
      • 63<=k<=94 のとき、S1 = (k - 1) ÷ 2 + 0xC1
    • 第2バイト(S2)の計算
      • kが奇数の場合
        • 1<=t<=63 のとき、S2 = t + 0x3F
        • 64<=t<=94 のとき、S2 = t + 0x40
      • kが偶数の場合
        • S2 = t + 0x9E
    • 計算の結果第2バイトが0x7E以下になることがある
      • 「美」の第2バイト 0x5C は ASCII のバックスラッシュにあたる
    • 重複符号化の問題
    • Windows, CP932, MS932, Windows-31J
    • Mac, MacJapanese
  • Unicode
    • UTF-8, UTF-16, UTF-32
    • UCS Transformation Format, Unicode Transformation Format
    • UTF-16
    • UTF-32
      • UCS-4
      • BOM, U+FEFF, (BE: FE FF 00 00), (LE: 00 00 FF FE)
      • UTF-32BE, UTF-32LE
    • 文字データベース: http://www.unicode.org/Public/UNIDATA/
      • UnicodeData.txt
    • UTF-8
      • ASCIIと互換性がある
      • ISO/IEC 10646, RFC 3629
      • 1つの符号位置の表現に1バイトから4バイト(または6バイト)までの長さを取り得る、可変長の符号化方式
      • UCS-4の全領域を符号化する場合には6バイト必要
      • 計算方法
        • 符号位置によってバイト列への対応が変わる
        • 0x00000000 - 0x0000007F: 0xxxxxxx
        • 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx
        • 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
        • 0x00010000 - 0x0010FFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
      • 冗長性の問題: 冗長な表現を避けて最も短いバイト列に符号化すること
      • BOM付きUTF-8の問題
      • CESU-8
      • Modified UTF-8