RFC3629でUTF-8のバイト範囲が変更されている
最新のUTF-8では5〜6バイトの表現がすべて不正になったんですね
知らなかった…(ぉぃ
最新と言っても RFC3629 って2003年?ずいぶん前だな
他にもコマゴマと範囲が変わったみたい
RFC2279(旧)
1バイト | 2バイト | 3バイト | 4バイト | 5バイト | 6バイト | |
---|---|---|---|---|---|---|
UTF8-1 | 0x00 〜 0x7F | - | - | - | - | - |
UTF8-2*1 | 0xC0 〜 0xDF | UTF8-tail | - | - | - | - |
UTF8-3*2 | 0xE0 〜 0xEF | UTF8-tail | UTF8-tail | - | - | - |
UTF8-4*3 | 0xF0 〜 0xF7 | UTF8-tail | UTF8-tail | UTF8-tail | - | - |
UTF8-5*4 | 0xF8 〜 0xFB | UTF8-tail | UTF8-tail | UTF8-tail | UTF8-tail | - |
UTF8-6*5 | 0xFC 〜 0xFD | UTF8-tail | UTF8-tail | UTF8-tail | UTF8-tail | UTF8-tail |
- UTF8-tail は「0x80 〜 0xBF」
- RFC 2279 - UTF-8, a transformation format of ISO 10646
RFC3629(現)
1バイト | 2バイト | 3バイト | 4バイト | |
---|---|---|---|---|
UTF8-1 | 0x00 〜 0x7F | - | - | - |
UTF8-2*6 | 0xC2 〜 0xDF | UTF8-tail | - | - |
UTF8-3 | 0xE0 | 0xA0 〜 0xBF | UTF8-tail | - |
= | 0xE1 〜 0xEC | UTF8-tail | UTF8-tail | - |
= | 0xED | 0x80 〜 0x9F | UTF8-tail | - |
= | 0xEE 〜 0xEF | UTF8-tail | UTF8-tail | - |
UTF8-4 | 0xF0 | 0x90 〜 0xBF | UTF8-tail | UTF8-tail |
= | 0xF1 〜 0xF3 | UTF8-tail | UTF8-tail | UTF8-tail |
= | 0xF4 | 0x80 〜 0x8F | UTF8-tail | UTF8-tail |
- UTF8-tail は「0x80 〜 0xBF」
- 5〜6バイト表現は全て撤廃
- RFC 3629 - UTF-8, a transformation format of ISO 10646
このチェックロジック作るの面倒だなァ〜…
参照
Google Chrome 4.0 (BETA) へupdate
参照
今朝通勤中に電車でコソコソ見ました…
はやく病院行ってください…
外部JavaScriptファイルでformをsubmitする場合の注意 submitが複数回実行される
submit.js
$(function() { var btn = $('.btn'); btn.click(function(){ $(this).parents('form:first').submit(); alert('call alert'); }); });
test.html
<script type="text/javascript" src="jquery.js"></script> <!-- 同じ外部JavaScriptファイルを2回呼び出す --> <script type="text/javascript" src="alert.js"></script> <script type="text/javascript" src="alert.js"></script> <form name="form1" action="test2.html" method="post"> <input class="btn" type="button" value="送信"> </form>
IE8、Google Chrome3.0
- alert.js は2回読み込まれる
- submit は2回実行される
- alert は2回実行される
FireFox3.5
- alert.js は2回読み込まれる
- submit は1回だけ実行される
- alert は1回だけ実行される
まとめ
ブラウザごとに挙動が変わるのでページ内で同じ外部JavaScriptファイルの読み込みが複数回おこないわないように注意する
jQueryでinputタグのname属性に「submit」が指定されているformのsubmitができない
inputタグのname属性に「submit」が指定されているform
<form name="form1" action="test2.html" method="post"> <!-- name属性に「submit」を指定 --> <input name="submit" class="btn" type="button" value="送信"> </form> <script language="JavaScript" type="text/javascript"> $(function() { var btn = $('.btn'); btn.click(function(){ $(this).parents('form:first').submit(); }); }); </script>
「送信」ボタンを押しても反応もナシ
ちなみにid属性にも「submit」が指定されると同じ現象が発生
理由はなんとなく分かる気がするが…?後で調べよう!
inputタグのname属性を別の名前にするか、指定なしにすれば問題なくsubmitされました
IE8、FireFox3.5、Chrome3.0で確認
グレゴリオ暦開始は日本時間のAM09:00から
ロケールが日本であった場合
Date changeDay = (new GregorianCalendar()).getGregorianChange(); System.out.println("Gregorian Change is " + changDay);
実行結果
Gregorian Change is Fri Oct 15 09:00:00 JST 1582
コンストラクタ GregorianCalendar(int, int, int)
もしグレゴリオ暦以降というチェックをかけたい場合
GregorianCalendar(int, int, int) コンストラクタの使用には注意が必要!
時分秒がゼロ埋めされてしまう
Date changeDay = (new GregorianCalendar()).getGregorianChange(); Date date1582_10_15 = (new GregorianCalendar(1582, 10-1, 15)).getTime(); System.out.println("Gregorian Change is " + changDay); System.out.println("date1582_10_15 is " + date1582_10_15); System.out.println("changeDate.after(date1582_10_15) : " + changeDate.after(date1582_10_15)); System.out.println("changeDate.before(date1582_10_15): " + changeDate.before(date1582_10_15));
実行結果
Gregorian Change is Fri Oct 15 09:00:00 JST 1582
date1582_10_15 is Fri Oct 15 00:00:00 JST 1582
changeDate.after(date1582_10_15) : true
changeDate.before(date1582_10_15): false
つまり、日本時間で「1582年10月15日」の
「09:00:00」以降がグレゴリオ暦であり
「08:59:59」はグレゴリオ暦ではない(ユリウス暦というらしい?)
「1582/10/15」という入力データだけでは
グレゴリオ暦として扱うのか、ユリウス暦で扱うのか
決定できないので、扱いには注意が必要だ