一昨日ブログに書いた「スマートウォッチ」のことを調べていたら、「Pebbleというスマートウォッチは、英語のような1バイト文字しか表示できず、日本語のような2バイト文字は表示できないので注意」と書かれたブログがあった。
この言葉はもうあまり使われていないと思っていたので、アレと思った。

Blackleopard.JPG

昔のパソコンは、英語はASCII(7ビット)、フランス語やドイツ語のような西欧特殊文字はISO 8859-1(8ビット)を使っていた。
8ビットの情報(2進数8桁)は、最大0から255までの256種類の数値に割り当てられる。
これにASCIIではアルファベット小文字、大文字を合わせて52文字、アラビア数字が0から9で10文字、その他、~!@#$%^&*()_+`-={}|[]\;':",./<>?のようないわゆる半角記号を収録している。
ISO-8859-1ではさらに、ÉéÀÈÙàèùのようなアクセント記号がついた西欧特殊文字が入っている。
これらの字を含めても、8ビットの範囲に収まるので1バイト文字と呼んでいた。
英語でもsingle byte lettersとかSBCS(single byte coding system)と言う。

日本でもコンピューターは導入された当初は、ASCIIやEBCDICで定められた1バイト文字を使っていた。
すべて英語やローマ字で情報処理をしていたのである。

その後アイウエオのようないわゆる半角カタカナが導入された。
これは新生銀行などでいまだに愛用されている。
半角カタカナはおおむね50文字である。
JIS X 0201という文字コード規格はISO 8850-1の西欧特殊文字の部分を半角カタカナで置き換えたものであり、そういう意味では半角カタカナも1バイト文字である。

ただし、英語でsingle byte lettersとかSBCSというとき、半角カタカナも含まれるのかはっきりしない。
英語話者である欧米の人は、当然ISO 8859-1を想定してsingle byteと言っていると思う。
ISO 8859-1とJIS X 0201は半角カタカナと西欧特殊文字がカブるので同時に使えないから、欧米の人がsingle byteというとき半角カタカナは想定の範囲外になると思われる。
また、欧米の人は半角カタカナと全角カタカナの違いなんかに(知っている限り)あまり詳しくないので、日本語が1バイトで書き表されるとか、半角カタカナが出来たころ日本語による情報処理が1バイト文字で行われていたとか知っている人は少ないと思う。

さて、日本語を扱うコンピューターで漢字を使うようになった。
漢字は何字あるのだろうか。
中国の康煕字典には49,030字が、日本の諸橋大漢和辞典には5万余字が収録されていると言うが、いずれにしても1バイト(8ビット)では収録が不可能である。
JIS X 0208には6,879字の図形文字が入っている。
この文字は漢字の他にABC123のようないわゆる全角英数字や、○▲■のような図形、ロシア文字、ギリシャ文字、「」『』のような記号も含まれる。
このような漢字以外の文字を非漢字という。
しかし圧倒的に字が多いのは漢字である。
JIS X 0208は16ビット(2バイト)である。

MicrosoftのWindowsや、Macintoshで当初使用されたShift_JIS文字コードは、ASCIIの範囲の英数字および半角カタカナを2バイト、JIS X 0208の範囲の全角文字(漢字および非漢字)を2バイトに収録している。
(ただしShift_JISは、JIS X 0208の文字コードをずらしてASCIIおよび半角カナと共存させている。JISをずらしたからシフトJISと言う。)
ということで、日本語の漢字および非漢字のことを2バイト文字と呼んでいた。
英語でも、double byte charactersとかDBCS(double byte coding system)と言っていた。

欧米の人もこの言葉を使う。
英語や西欧語(フランス語、イタリア語、ドイツ語(German)、スペイン語の頭文字を取ってFIGSと言う)が表示できるが、アジア語(中国語、日本語、韓国語、ベトナム語の頭文字を取ってCJKVなどと言う)を表示できないことを「not double byte enabled」とか「no DBCS support」と言う。

冒頭に引いた、「Pebbleというスマートウォッチは、英語のような1バイト文字しか表示できず、日本語のような2バイト文字は表示できないので注意」という言い方も、このShift_JISを踏まえた言い方であろう。

しかしこの言い方はいろいろ疑問がある。

半角カタカナは1バイト文字に入るのか

まず、Pebbleは半角カタカナは表示出来るのだろうか。
Pebbleを持っていないので、半角カタカナをサポートしているかどうか分からないが、もしISO 8859-1のようなレガシーコード(Unicode以前の文字コード)を使っているのなら表示出来ないと思われる。
もしPebbleが日本語のフォントを持っていないのなら、やはり半角カタカナを表示できないだろう。
しかし、Shift_JISでは半角カタカナは1バイトだったので「1バイト文字が表示できない」という表現では、半角カタカナが表示されるのかどうか分からない。

最近はiPhoneでも半角カタカナを入力するのは大変なので、「半角カタカナ」というものの存在を知っている人がいるかどうか分からない。

いまどきはUnicodeなのではないだろうか

さて、ISO 8859-1やShift_JISはレガシーコードと言われる。
古いコードというほどの意味だが、いまどきのコンピューターはUnicodeを使って情報交換している。
Unicodeのエンコーディングスキーム(文字と数値を変換する決まり)は、UTF-16とUTF-8がほとんどである。

まず、Unicodeの世界では、正確にはバイトという言葉を使わない。
byteというのは慣習的に8ビットのことだが、もともとは欧文1文字分の情報を指す言葉で、正確ではない。
(Wikipedia調べでは、歴史上は5ビットから12ビットまであったと言われる。へー)
8ビットのことを正確には1オクテットという。
以下は1バイトといえば8ビットのこと、1オクテットと1バイトは同じ意味の言葉、という意味で通す。

さて、UTF-8は以下のようにバイト数が決まっている。

 英語(ASCIIの範囲)========1バイト
 西欧特殊文字(ISO 8859-1 右面)ーー2バイト
 漢字(JIS X 0208 の範囲)=====3バイト

くだんのPebble紹介ブログで「英語などの1バイト」と言っているのは、FIGSの西欧特殊文字も含んでいると思われる。
しかし、UTF-8の場合はÉéÀÈÙàèùをはじめとする西欧特殊文字は2バイトなのである。
また、「日本語など2バイト文字」はCJKVを含むと思われるが、これは3バイトだ。

いっぽう、UTF-16の場合は、上のすべての範囲の文字が2バイトである。
よって「2バイト文字」と言えば、すべての字が入ってしまう。
(辰吉𠀋一郎の𠀋(点付きの丈)のような文字は4バイトである。これは「サロゲートペア」について書いた過去記事に詳しい。)

文字通りの意味ではなく成語では?

ASCIIおよびISO 8859-1のことを1バイト文字、アジアの漢字や非漢字のことを2バイト文字というのは、文字通り「1バイトの文字」、「2バイトの文字」を指すのではなく、昔からコンピューター業界にあまねく呼び習わされていた言葉をそのまま援用しただけで、目くじらを立てる必要はないのではないか。
という考え方もあると思うが、もう使われなくなった文字コード規格を参照する言葉をわざわざ使うこともないのではないだろうかとぼくは思う。
あと、1バイトとか2バイトとかそこそこ難しい言葉である。
これからコンピューターを覚える人が、わざわざもう使われなくなった、しかし半角カタカナや全角英字のようにレガシーで残っている、技術的で難しい言葉を改めて覚えるのは変な気がする。

じゃあなんと言えばいいのか

1バイト文字、2バイト文字に変わる言い方はあるのだろうか。
上のレビューの要件であれば「Pebbleは英語は表示できるが日本語は表示できない」でいいと思う。
言葉と文字は関係がない(ローマ字で日本語を書くこともできるから)が、この場合のスマートウォッチの性能を語る真意としては言葉を表現できるかどうかだと思う。
FIGSは表示できるがCJKVは表示できないということがちゃんと分かっていて、あえてそこを強調したいのであれば「欧米語は表示できるがアジア語は表示できない」でいいと思うがどうか。


追記2014-06-12

上の文章を自分で読んでいて、以下の疑問にとらわれた。 新生銀行をiPhoneで使うときはどうするのか? =>「新生銀行モバイルバンキング」を使うようだ。で、これを使うときは「ひらがな」を使えばいいようだ。だったらPC版もそうしろよ!!!
振込・振替 操作ガイド | 新生銀行