Download as pdf or txt
Download as pdf or txt
You are on page 1of 40

文字コードと携帯絵文字

ウノウ株式会社 結城慎一郎
まずは基礎編
コンピュータで文字を扱うには?
コンピュータで文字を扱うには
● あくまで計算機
● 「文字そのもの」はそのまま扱えない
● 扱える形にしなければならない
● ビット(バイト)で表現できることが必要
どのようにして表現するか?
● 文字に重複なく非負数表現を割り当てた「文字集合」を使う

コード 1 2 3 4 5

文字 A B C D E

● 非負数表現で割り当てた数字を「コード」
● コードの範囲を「コード空間」
どのような文字集合があるか?
ASCII
● American Standard Code for Information Interchange
● もっとも有名な文字集合
● 33の制御文字、94の図形文字、空白の合計128種類
● コード空間を0-127(7bit)の範囲で使用
● http://www.psl.ne.jp/perl/pdojo00b.html
● ISO-646
ISO-8859
● 仏語、独語、ギリシャ語、アラビア語などの文字集合
● パート1から16まで16種の文字集合が存在
● ISO-8859-1、ISO-8859-7 などと表記
● ASCIIの使っていない8ビット目(0x80-0xFF)を利用
● コード空間は0-255(8bit)の範囲
● 特に使われているISO-8859-1を、
Latin-1と表記することもある
JIS X0201
● 英数字とカタカナの文字集合
● 7bit(0x00-0x7F)はASCIIとほぼ一緒
● \(バックスラッシュ)が¥(円記号)
● ~(チルダ)が ̄(オーバーライン)

● 8bit目(0x80-0xFF)はカタカナを割り当てた
JIS X0208
● 日本ではよく使われる文字集合
● 区番号94個、点番号94個を便宜的に利用した文字集合
● 16bit(2byte)で表す
● 94x94=8836のコード空間
● 6789文字に割り当て、そのうち漢字は6355文字
● 漢字の他には記号、数字、ローマ字、ひらがな、カタカナ、
ギリシャ文字 etc...
● これを拡張したものに JIS X0212 と JIS X0213 など
● 基本的には漢字を増やしただけ
Unicode
● Apple、IBM、Microsoftなどが中心となって提唱
● ISO/IEC 10646 の一部として標準化

● 各国の文字を一つの文字集合で表す事を目指す
● 16bit(2byte)=65,535語で表すことを目標に作られた
● が全然足りず今は21bitで1,114,111語 (約100万語)
● 日中韓の漢字を統合して同一番号にしようとして問題に
ISO/IEC 10646 (UCS)
● Universal Multiple-Octet Coded Character Set
● 符号化文字集合の国際規格のひとつ
● Unicode(21bit)の上位互換で31bitを持つ
● けど、Unicodeで使用できない領域には作らない宣言
● 当初のUnicodeの範囲(16bit)をUCS-2
● 本来の範囲(31bit)をUCS-4と呼ぶ
他にも多くの文字集合があります。
文字集合を扱うには
● 特定の文字とその表現のためのコードに過ぎない
● 表示するにはバイト表現にする必要がある
● どのような方式で表現するか?
● 文字符号化方式に沿って変換する
文字符号化方式の例
● みなさんおなじみの方々
● JIS
● EUC
● Shift_JIS
● UTF-8
● etc
● 文字集合のコードとバイト表現が同一のため区分が曖昧
● ASCII (JIS X 0201など)
いわゆる文字化け
● ある特定の文字集合で表されたバイト表現に、
異なった文字符号化方式で変換したため
どんな文字符号化方式があるか?
JISコード
● ASCII/JIS X0201/JIS X0208/JIS X0212の組合せ
● 文字集合をエスケープシーケンスで切り替えて使う
● ASCII
– 0x1B 0x28 0x42
● JIS X201
– 0x1B 0x28 0x4A
● JIS X208
– 0x1B 0x24 0x42
● JIS X212
– 0x1B 0x24 0x28 0x44
JISコード
● 「EDY最高」という文字列ならば
● 0x1B 0x28 0x42 (ASCIIエスケープシーケンス)
● 0x45 (E)
● 0x44 (D)
● 0x59 (Y)
● 0x1B 0x24 0x42 (JIS X208エスケープシーケンス)
● 0x3A 0x47(最)
● 0x39 0x62(高)
● 0x1B 0x28 0x42 (ASCIIエスケープシーケンス)

● すべて7bitで表現できる
EUC
● Extended UNIX Code (拡張UNIXコード)
● 日本語版の他にもいろいろある

● JISを元にしているのでUJISとも言う(UNIXized JIS)
● 圧縮フォーマットと2byte固定フォーマットがある
● 圧縮フォーマットをよく使う

● 4つのコードセットがあり、それぞれ
● ASCII(又はJIS X201ローマ字)
● JIS X208
● JIS X201カタカナ
● JIS X212
EUC
● エスケープシーケンスを使わないので、表現が短い
● 1byte目で判断する
● 0-127 (0x00–0x7F) なら ASCII
● 161-254 (0xA1–0xFE) なら JIS X0208
● 142 (0x8E) なら JIS X0201 カタカナ
● 143 (0x8F) なら JIS X0212
● 8bit使う
● メールなどの7bit転送が想定される分野には使いにくい
Shift_JIS
● Microsoftが策定を進めた
● SJISとも呼ばれる
● Microsoftが独自に拡張したSJIS-win(CP932)というのもある

● 3つのコードセットを利用
● ASCII(又はJIS X201ローマ字)
● JIS X208
● JIS X201カタカナ

– JIS X212 は使わない (EUCは使う)


Shift_JIS
● 1byte目で判断し、空き番号を使って残りの文字を表現
● 0-127 (0x00–0x7F) なら ASCII
● 161-223 (0xA1–0xDF) なら JIS X0201 カタカナ
● 129–159 (0x81-0x9F),
224-252 (0xE0-0xFC)なら JIS X0208を使う
(2byte目)
● こちらも8bit使う
UTF-8
● ISO/IEC 10646とUnicode(2.0~)の文字集合で使える
● ASCII互換にするため、ASCIIの範囲は1byteで符号化
● 他は2-6byteで符号化
● 1byte目の上位ビット数でバイト数を判定する
– 0 - 127 (0x00-0x7F) 1byte
– 192 – 223 (0xC0-0xDF) 2byte
– 224 – 239 (0xE0-0xEF) 3byte
– 240 – 247 (0xF0-0xF7) 4byte
– 248 – 251 (0xF8-0xFB) 5byte
– 252 – 253 (0xFC-0xFD) 6byte

● バイト間違いが起こりにくい
UTF-16
● UTF-8同様ISO/IEC 10646とUnicode(2.0~)で使える
● 当初の目論見の16bitでは収まらなくなったため、
サロゲートペアを利用することになった
● 通常のUCS-2(16bit)領域
● 上記の空き領域2箇所を利用し組合せて1文字として利用(32bit)

● リトルエンディアンとビッグエンディアンがあり、
BOMで判断する
● BOMがなければリトルエンディアンと定める
● 最初から決まっているUTF-16LE、UTF-16BEもある
● Windowsのメモ帳(Unicode)はこれに当たる
エンディアンって?
● バイトオーダー
● 多バイト列を格納する際の並び順
● 0x1234, 0xABCD があるとして、
● 12 34 AB CD がビッグエンディアン
● 34 12 CD AB がリトルエンディアン
● ビッグエンディアンの方が、人が見てわかりやすい

● コンピュータからみて計算しやすい → リトルエンディアン
● Intelはリトルエンディアン

● ネットワークパケットはビッグエンディアン

● 画像なども決められている
UTF-32
● ISO/IEC 10646とUnicode(3.0~)で使える
● 全コードを32bit固定長で扱う
● 実際にはUnicodeの21bit
● UTF-16同様リトルエンディアンとビッグエンディアン
● 同じくUTF-32LE、UTF-32BEもある
ようやくここから携帯絵文字の話
携帯絵文字とは?
● 各業者による独自実装
● 扱う文字集合のうち、利用していないコード空間を利用
携帯絵文字とは?
● 各業者による独自実装
● 扱う文字集合のうち、利用していないコード空間を利用
● いわゆる外字を利用する
docomo 絵文字
● Shift_JISの場合
● 1byte目が248-249(0xF8-0xF9)で始まる2byte文字
● 224-252(0xE0-0xFC)の範囲内なのでJIS X0208と判定される
– (0xF8-0x9F)-(0xF8-0xFC)
– (0xF9-0x40)-(0xF9-0x49)
– (0xF9-0x50)-(0xF9-0x57)
– (0xF9-0x5B)-(0xF9-0x5E)
– (0xF9-0x72)-(0xF9-0x7E)
– (0xF9-0x80)-(0xF9-0xFC)
● Unicode
● Private Use Area(私用/外字領域) (U+0xE000-0xF8FF)
● U+E63E-E6A5, U+E6AC-E6AE, U+E6B1-E6BA,
U+E6CE-E757
softbank 絵文字
● WebコードはShift_JIS
● 5byteで表現する。6×94=564文字
● 1byte目 0x1B (ESC)

● 2byte目 0x24 ($)

● 3byte目 0x47 (G) / 0x45 (E) / 0x46 (F) / 0x4F (O) / 0x50 (P) / 0x51 (Q)

● 4byte目 0x21-0x7E (33 - 126)

● 5byte目 0x0F (SI シフトイン)


Haruki++

http://labs.unoh.net/2007/01/softbank_1.html
softbank 絵文字
● Unicode
● Private Use Area(私用/外字領域) (U+0xE000-0xF8FF)
– U+E001-E05A
– U+E101-E15A
– U+E201-E253
– U+E301-E34D
– U+E401-E44C
– U+E501-E537
au/KDDI 絵文字
● Shift_JISの場合
● 224-252(0xE0-0xFC)の範囲内なのでJIS X0208と判定される

● 1byte目が243,246,247(0xF3/0xF6/0xF7)で始まる
2byte文字すべて
● 残りのコードは
● (0xF4-0x40)-(0xF4-0x7E)
● (0xF4-0x80)-(0xF4-0x8D)

● Unicode
● Private Use Area(私用/外字領域) (U+0xE000-0xF8FF)
● U+E468-E5DF, U+EA80-EB88
各社 Unicodeをまとめると
● 3社ともPrivate Use Areaを利用(U+0xE000-0xF8FF)
● ご覧の通りau/KDDIとsoftbankが一部かぶってます
● docomo
U+E63E-E6A5
U+E6AC-E6AE
U+E6B1-E6BA
U+E6CE-E757
● Softbank
U+E001-E05A
U+E101-E15A
U+E201-E253
U+E301-E34D
U+E401-E44C
U+E501-E537
● au/KDDI
U+E468-E5DF
U+EA80-EB88
Google提唱の emoji4unicode
● 基本的にはすでに存在し、かつ意味の近いものは統合させる?
● 時計や天気など

● 他は U+1F300-1F527の範囲(空き領域)に収まっている感じ
よくある話
Windows機種依存文字で悩む
● 絵文字じゃないけど①とかⅡとか﨑とか髙とか
● 普通に携帯では「記号」として登場する
● SJIS-win (CP932)
● EUCJP-win (CP51932)
● ISO-2022-JP-MS とか (CP932がすべて使える)
● 上記適切に指定しないと、エンコーディングで落としてし
まうので気をつける
● docomoのiモード用Shift_JISなど、CP932ではないが
同じ区番を利用している部分がある
ご静聴ありがとうございました。
参考文献
● 新The UNIX Super Text 上 改訂増補版 (単行本)

● Wikipedia
● ASCII

● ISO/IEC 8859

● Unicode

● UTF-8

● 携帯電話の絵文字

● 作ろうiモードコンテンツ:iモード対応絵文字 | サービス・機能 | NTTドコモ


http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/

● Mobile Creation
http://creation.mb.softbank.jp/

● KDDI au: 技術情報 > 絵文字


http://www.au.kddi.com/ezfactory/tec/spec/3.html

You might also like