URLEncoder/URLDecoderが悩ましい変換をするので、仕様的な点でURLエンコードについて確認する。RFC 3986 の 2.1 Percent-Encoding のところに、まずあった。まぁ、% HEXDIG HEXDIG で構成するべしという感じ。そんで、大文字でも小文字でも一緒だけど、大文字を使うべしと書いてある(そうなのか…)。そんで、2.3. Unreserved Characters に ALPHA (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), period (%2E), underscore (%5F), tilde (%7E) ていうのは、正規化により %XY から文字に変換されるべしと言っている。Wikipedia の Percent-encodingには、結果として、URL が短くなるから好まれるみたい、というように書いてある。HTML 的には、application/x-www-form-urlencoded あたりだな。RFC 1738を参照しているけど、これは RFC 3986 でアップデートされているし。Firefox とかは、%41 は A とかとして URL で扱ってくれるようだ。URLEncoderは %41 ではく。URLDecoder はこの辺を柔軟にやらんから、マルチバイトで化けるわけで(過去との互換性を維持し続けるためなのかな…)。そんなわけで、間違いとは言わないけど、世の中についていっていないから、URLDecoder は使いにくい…。
カテゴリー: Tech
rownumの動き
Oracle の rownum の動きについて調べる。例えば、次のようなSQL文を実行すると、
select * from A where B order by C
rownum が振られるタイミングは以下みたいな感じ。
rownum = 1 for x in ( select * from A ) loop if ( x を条件 B でチェック) then 行を出力 rownum = rownum + 1 end if; end loop; C でソート
という感じで、
- FROM/WHERE 句を処理
- 行を吐き出しと ROWNUM 増やして割り当て
- SELECT を適用
- GROUP BY を適用
- HAVING を適用
- ORDER BY を適用
という感じの順に処理していく。そんなわけで、
select * from A where ROWNUM > 1
みたいなことやっても行は得られん(rownumが増えないから)。
という感じで、On ROWNUM and Limiting Resultsに書いてあった。一つ賢くなった
HTML 5 ― HTML 4 からの変更点
HTML 5 ― HTML 4 からの変更点 だそうな。ざっと見たけど、そういう変更が入るのね、という感じ。ひとつ気づいたのが「meta 要素の charset 属性による指定。要素は文書の先頭 512 バイト以内に記述する必要があります。」って書いてある。前にHTMLパースするときにcharsetのmetaタグは何バイトまで期待すればいいのだろうと考えたこともあったけど、512バイトと明記してくれると助かる(前バージョンとか、明記してなかったような気も)。まぁ、普通に考えれば、512バイトくらい読めば十分な気もするからこの値を使おうっと。