auの絵文字をUTF-8なフォームから送信すると-その2-
昨日の続き
UTF-8なフォームから「晴れ」絵文字を送信した時に送られたコード
機種名 | 送られてきたコード | ブラウザバージョン |
---|---|---|
W61SA | \xEE\x92\x88 | 6.2_7.2.7.1.K.1.5.1.119 |
W51P | \xEE\xBD\xA0 | 6.2.0.11.1.4 |
CA002 | \xEE\x92\x88 | 6.2_7.2.7.1.K.2.234 |
推測するに、KCP+端末は公式サイトのUnicode(をUTF-8エンコーディングしたもの)が送られる?
これって、周知の事実で私だけ知らなかったんだろうか?
ちょっとショック
【2011-04-01追記】
formタグに、accept-charset属性をつけていたのが原因でした。
<html> <head> <meta http-equiv="cache-control" content="max-age=0"> <title>Form</title> </head> <body> <p> <form action="**.cgi" method="post" accept-charset="UTF-8"> <input type="text" name="text" value=""> <input type="submit" value="送信"> </form> </p> </html>
↑こんな風に書くと、KCP+端末は「晴れ」絵文字を\xEE\x92\x88で送ってくる。
機種名 | 送られてきたコード | KCP+ |
---|---|---|
W61SA | \xEE\x92\x88 | ○ |
W51P | \xEE\xBD\xA0 | × |
機種名 | 送られてきたコード | KCP+ |
---|---|---|
W61SA | \xEE\xBD\xA0 | ○ |
W51P | \xEE\xBD\xA0 | × |
普通はaccept-charset属性なんて付けませんからね。
驚かせてすみません。
でも、なんでKCP+端末はaccept-charset属性をつけると絵文字コードが変わるんだろう。
確か、KCP+端末でWMLフォームから送信する時、accept-charset属性が無いと2バイト文字が送信できなかった(この時はShift_JISだった)記憶があるけれども、それと関連するのかな?
そう言えばKCP+端末ってWML2.0に対応しているみたいなんですよね。
KCP+のブラウザって、htmlをwmlに変換して解釈しているのかな?
つまり、上にあるhtmlを、
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE wml PUBLIC "-//OPENWAVE.COM//DTD WML 1.3//EN" "http://www.openwave.com/dtd/wml13.dtd"> <wml> <head> <meta http-equiv="cache-control" content="max-age=0" forua="true"/> </head> <card title="Form"> <input type="text" name="text" value=""/> <do type="button" label="送信"> <go href="**.cgi" method="post" accept-charset="UTF-8"> <postfield name="text" value="$(text)"/> </go> </do> </card> </wml>
のように解釈しているんじゃないかと。。。
しかし、そうだとしても『なぜKCP+端末はaccept-charset属性をつけると絵文字コードが変わるのか』の答えは得られない気がしますね。
<参考>
WML2.0の仕様書によると、accept-charsetは、wml:go要素の属性として以下のような働きをします。
The accept-charset attribute specifies the list of character encodings for data that the origin server must accept
when processing input. The value of this attribute is a comma- or space-separated list of character encoding names as
specified in [RFC2045] and [RFC2616].If the accept-charset attribute is not specified or is the reserved string unknown, the user agent should use the
character encoding that was used to transmit the document that contains the wml:go element.
The user agent SHOULD transcode the field names and values to the correct character set, as specified explicitly
by the accept-charset or implicitly by the document encoding.