Professional Documents
Culture Documents
文字コードと携帯絵文字
文字コードと携帯絵文字
ウノウ株式会社 結城慎一郎
まずは基礎編
コンピュータで文字を扱うには?
コンピュータで文字を扱うには
● あくまで計算機
● 「文字そのもの」はそのまま扱えない
● 扱える形にしなければならない
● ビット(バイト)で表現できることが必要
どのようにして表現するか?
● 文字に重複なく非負数表現を割り当てた「文字集合」を使う
コード 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カタカナ
● バイト間違いが起こりにくい
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)
●
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
● 携帯電話の絵文字
● Mobile Creation
http://creation.mb.softbank.jp/