ページ 11

【雑談】丸囲み数字の話

Posted: 2010年6月20日(日) 04:10
by YuO
元スレッド : http://www.play21.jp/board/formz.cgi?ac ... e=&id=dixq

返信しようと思いましたが,スレッドの内容からずれていたので新規に立てています。


丸囲み数字,昔からの取り扱いが面倒な文字の一つですね……。
# 鄧 などよりましですが (U+9127 : Win31j/X0213:1-92-80,X0212:98-71 ←EUC-JP系で本来のEUC-JPにするとIEで読めず,MS系でCP51932にすると非Windowsで読めない可能性)


・Webサイト側の対策
UTF-8/16で作ってしまう
少なくとも,Form要素のあるページとそれを受け付けるページはこれにしておくだけで,
丸囲み数字からハートマークから果てはアラビア文字までValidな状況になります。
# 表示できるかは別問題。それは表示環境側のフォントの問題なので。

・ユーザー側の対策
(このページのエンコーディングはShift_JISだから) JIS X 0201/0208に無い文字は全て数値文字参照にしてしまう。
これによって,丸囲み数字から (以下略)
# このページのCGIが数値文字参照について透過であることを突いた方法ではありますが。

・ブラウザ側が行っている対策
現在のページのエンコーディングであらわすことが不可能な文字は数値文字参照にして送る


現状のHTML,つまりはHTML 4.01やXHTML (というかXMLですが) は,文字集合としてISO 10646-1を指定しています。
これはほぼUnicodeを指定していることに等しくなります。
このため,数値参照であれば,Unicode上の文字は一応全て使えることになります。

さて,このページについてみると,エンコーディングとしてはShift_JISということになっています。
Shift_JISの文字集合は,
http://www.iana.org/assignments/character-sets
によれば,
・JIS X 0201
・JIS X 0208
ですから,この状況は
・文字集合としてはISO 10646-1を指定
・エンコーディングはShift_JISを指定
という不思議な状態に見えます。
実際には,JIS X 0201およびJIS X 0208はISO 10646-1のサブセットになっているので,マッピングによって解決されています。
# 上記から,このページ中の0x5CはYEN SIGN,つまりはU+00A5へのマッピングが望ましいことになります。


さて,元記事でdixqさんが54851で試した各種文字ですが,54852の画像にあるようにブラウザが数値文字参照に置き換えてくれています。
この機能も問題になる (U+0026 AMPERSANDをエスケープする場合,♡のように展開されたまま残る) 可能性はあるのですが,この掲示板では起きないので,気にしないでおきます。

問題は,丸囲み数字などの,Windows-31jに含まれる文字です。
これらは,大抵のWindowsのブラウザが数値文字参照に置き換えずに送信してしまいます。
ところが,① (U+2460 CIRCLED DIGIT ONE) はJIS X 0201およびJIS X 0208に含まれない文字です。
# JIS X 0213に含まれるほか,ISO 10646-1互換のJIS X 0221に含まれます。
しかし,規格上不正な文字なので,どう扱われるかはCGIやUAに依存します。
大多数のCGIは黙って受け入れ,UAは①に置き換えると思います。
ただし,Shift_JISをx-mac-japanese (IANA未登録につき探していたら出てきた名前を利用) として扱うUAであれば,
㈰ (U+3230 PARENTHESIZED IDEOGRAPH SUN) にマッピングされるでしょうし,
純粋なShift_JISとして解釈するなら,未規定文字なので,U+FFFD (REPLACEMENT CHARACTER) に置き換えるかもしれません。
# Mac OS X の状況は,ソフトウェア次第のようです。 http://oku.edu.mie-u.ac.jp/~okumura/xhtml/encoding.html


ぐだぐだ書いてきましたが,結論としては,
「ここはエンコーディングがShift_JISなんだから,いわゆる『機種依存文字』と呼ばれる文字の使用は控えるのが安全」
だったりします。

ところで,phpBBの表側はUTF-8ですね。
裏側 (DB) もUTF-8であれば,これらの問題はほぼ気にする必要がないのですが……。
表はUTF-8,裏がなぜかShift_JISとかいうシステムがなぜかあるので……。

Re:【雑談】丸囲み数字の話

Posted: 2010年6月20日(日) 11:57
by たかぎ
別に文字だけのことではないんですが、世の中のすべての人がWindowsを使っているという思い込みをしている人は少なくありませんね。

Re:【雑談】丸囲み数字の話

Posted: 2010年6月20日(日) 12:04
by 釣り師
>別に文字だけのことではないんですが、世の中のすべての人がWindowsを使っているという思い込みをしている人は少なくありませんね。

僕も最近LinuxやMacに触れてみるまでそう思い込んでました。

Re:【雑談】丸囲み数字の話

Posted: 2010年6月20日(日) 12:55
by Dixq (管理人)
情報ありがとうございます。

私は現在windowsとLinuxの使用頻度は半々位でしょうか。
まぁLinuxはあまり使われていないにしてもiPadやiPhoneがこれだけヒットしているので、そのうちマックがシェアを伸ばして来るかもしれませんね。

そうなると作る側は常にマルチプラットフォームを意識しないといけなくなるのでそれはそれで何だか…

Re:【雑談】丸囲み数字の話

Posted: 2010年6月20日(日) 13:01
by たかぎ
> まぁLinuxはあまり使われていないにしてもiPadやiPhoneがこれだけヒットしているので、そのうちマックがシェアを伸ばして来るかもしれませんね。

iPadやiPhoneはともなく、セキュリティ面への考慮からシェアを伸ばしてくる可能性は十分あります。
WindowsにくらべてMacのセキュリティがすば抜けて高いとは思いませんが、少なくとも現時点では驚異そのものが少ないですからね。

> そうなると作る側は常にマルチプラットフォームを意識しないといけなくなるのでそれはそれで何だか…

携帯電話やゲームは今でもそういう状態です。
スマートフォンだけでも、Android、Windows Mobile、iPhoneといったまったく異なるプラットフォームで、それぞれ開発言語からして違いますからね。