nDiki : base64
base64
RFC2045 6.8 で定義されている符号化方式。
[A-Za-z0-9+/=] の65文字を使って符号化する。 = は padding 用の文字。
符号化された文字列は76文字以内でなければならない。 それ以上の場合は複数の行に分割する。
base64 とファイル名
'/' が含まれているため、バイト列を符号化してファイル名にするといった用途には不向き。
RFC3548 The Base16, Base32, and Base64 Data Encodings 「4. Base 64 Encoding with URL and Filename Safe Alphabet」では、[A-Za-z0-9-_=] が使用される。
Perl
Perl では MIME::Base64 モジュールがある。
スポンサード リンク
Related term
2002年10月20日 (日)
■ WiKicker 実装

URI まわりと、DB まわりの実装すすめる。UTF-8 PageName をファイル名にマッピングするのに base64 を使おうと思ったら、符号化される文字に '/' が含まれているのか。 '.' に置き換えた変形 base64 にすればいいかな。
- WiKicker における PageName 最長文字数 (2006-06-10)
- 最後がピリオド(.)で終わるファイル名をつけられない (2005-04-19)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- base64 亜種でのファイル名生成と、Windows (2005-04-21)
- WiKicker 0.35 リリース - 添付機能の修正など (2006-06-20)
2004年6月5日 (土)
■ [ WiKicker ] キャッシュまわりにバグ

Memcached まわりをいじったので、キャッシュ具合をテストしていたら変な現象が。 WikiPage が表示されるべきところに、検索結果が表示されている。 あれ?
@ ページの内容が表示されるところに検索結果が
WiKicker では WikiPage のレンダリング結果も検索結果もキャッシュしているが、それぞれ別のキャッシュキーになるようにしている (WiKickerのバージョンを $V とすると、'$V:h:ページ名' と '$V:s:検索語')ので混ざるはずがないんだけれどな。 キャッシュしているデータの形式も違うし。
最初は Memcached まわりのアップデートで不具合がでたのかと思ったが、戻しても変わらない。ということは、ずっと以前からこの問題が発生していたのか。 やば。 設定でニックネームを設定している(cookie に保存している)と、その Web ブラウザに対してはキャッシュ機能が働かないようになっているので発見が遅れてしまった。
で結局コードをチェックしてみたら「WikiPage 表示と検索結果表示の View クラスを同じにしていたため、検索結果のレンダリングが WikiPage レンダリング結果と同じ領域にキャッシュされる」という風になってしまっていた。 ということで誰かがページ名で検索するとそれがキャッシュされてしまい、ページを読もうとしてもキャッシュ破棄されるまで検索結果が表示されてしまうというひどい状況になっていたと。
修正。
@ キャッシュキーのバグ
Memcached の出力をチェックしていたら、たまにエラーが起きていることを確認。 Memcached のプロトコルをチェックしたら、キーには制御文字と空白は使えないとある。 Cache::Memcached を見たらキーはそのまま through するだけ。 ということでページ名に空白が含まれている場合などの時には、まずい事になっていたようだ。 こちらは、キーを自前でエンコーディング(ページデータベースファイル名の作成に使っている base64 の亜種)するように修正。
- [ Perl ] Memcached を使ってみる (2004-01-12)
- [ WiKicker ] WikiPage のHTMLレンダリング結果のキ... (2004-02-14)
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- [ WiKicker ] 古くても検索キャッシュを返す (2004-01-20)
2005年4月19日 (火)
■ 最後がピリオド(.)で終わるファイル名をつけられない

Windows で「最後がピリオド(.)で終わるファイル名」を新規作成する。 最後のピリオド(ドット)が無くなる。
……。
8.3形式の名残なのか? Explorer 上で作成しても、プログラム(Perlスクリプト)から作成しても駄目。
環境は Windows XP Home Edition SP2 + NTFS。 Windows 2000 + NTFS でも同様。
@ WiKicker
これは WiKicker のテストをしていて気がついた。 WiKicker では「PageName の base64 を生成し 『/』 を 『.』 で置き換えたもの」をファイル名にしている。 例えば UTF-8 で「タ」は
44K/
となるので、ファイル名は 「44K.」となる。 で最後の文字が消えてしまうので、デコードするとおかしくなると。
これを機会に Windows 環境でのエンコーディングは RFC3548 「4. Base 64 Encoding with URL and Filename Safe Alphabet」を使うように変更するか。
本当は全てこれに変更したいのだけれど、すでに動いている WikiForum の事を考えると移行は難しいかも。
- WiKicker における PageName 最長文字数 (2006-06-10)
- WiKicker 実装 (2002-10-20)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- ケータイ用にプライベート Wiki を設置 (2008-01-07)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
2005年4月21日 (木)
■ base64 亜種でのファイル名生成と、Windows

重要な事を忘れていた。
perl -MMIME::Base64 -e "print encode_base64('abc')"
perl -MMIME::Base64 -e "print encode_base64('abI')"
先日のピリオド問題発覚以前に、Windows には大文字小文字を区別しないという問題があるんだった……。
今回のファイル名生成規則の見直しにあわせて、今までの WiKicker のデータベースをどう簡単にコンバートするかということをずっと考えていたのだが、そういうレベルではないな。
Windows 版と UNIX 系版は、ファイル名生成規則は別物でいっか。
[ MIME::Base64 ]
- 最後がピリオド(.)で終わるファイル名をつけられない (2005-04-19)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- WiKicker における PageName 最長文字数 (2006-06-10)
- WiKicker 0.35 リリース - 添付機能の修正など (2006-06-20)
- WiKicker 実装 (2002-10-20)
2006年6月10日 (土)
■ WiKicker における PageName 最長文字数

WiKicker では PageName を エンコードした文字列を URI に埋め込んだり、サーバで保存する際のファイル名にしたりしている。 このため、PageName の最長文字数はそれらの最長文字数に依存しているはずである。
今まで確認を後回しにしていたのだが、新しい機能の追加の際に確認しておく必要があるので調査してみた。
@ WiKicker の実装
WiKicker の実装がらみとして最長を決める要素としては
- PageName の UTF-8 表現を URI エスケープしてページ URI に含めている。→ URI、HTTP、HTML、Web サーバ、Web ブラウザの実装による最長の制約
- PageName を base64 にエンコードしてファイル名にしている。→ ファイルシステムのファイル名、パス名の最長の制約
がある。
@ 各仕様等による制約
- HTTP では URI の長さには制限なし (RFC2616 3.2.1)
- Web サーバは Request-URI が長いと 414 Request-URI Too Long を返す (RFC2616 10.4.15)。Apache は LimitRequestLine ディレクティブにより、URI を含むリクエスト行のサイズを制限することができる(配布時には 8190)。
- Internet Explorer が扱える URL の長さは 2083文字。
- ext2 はファイル名は 255文字まで(増やすこともできる)。
- 手元の Linux 2.6.15 で試したところ、パス名は 4095文字まで。
@ WiKicker で問題が出ない PageName 最長文字数
上記の中ではファイル名による制約が一番大きい。
WiKicker 内部でファイル名として base64 (の亜種) でエンコードしたものを使っているので、元の文字列はは最長 189バイトまでなければならない。base64 だと3バイトで4文字になるため、189バイトで 252文字となる。
WiKicker ではここでさらにファイル名に ',v'、'-lock' をつける事があるので、実際には元の文字列は最長 186 バイトまでとなる。
PageName が 186 バイトまでだとすると、URL エスケープしたとして558バイト。 WikiEngine のスクリプトの URL や他のパラメータとあわせても、これぐらいなら大丈夫のはずである。
ということで WiKicker では Linux 上だと通常 PageName は 186 バイトが最長と言ってよさそうだ。 日本語の文字はだいたい UTF-8 で3バイトになるので、62 文字までということになる。
そのうち、WiKicker に制約チェックを入れることにしよう。 そのうち。
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- WiKicker 0.35 リリース - 添付機能の修正など (2006-06-20)
- 最後がピリオド(.)で終わるファイル名をつけられない (2005-04-19)
- WiKicker 実装 (2002-10-20)
- AWStats 6.0 (2004-05-21)
スポンサード リンク
Related web page
[5] [DFN[<strong>Base64</strong>]] は、[[オクテット列]]を64種類の[[英数字]]などに転写する[[符号化方式]]の一種です。 (一般に [Q[base 64]] は[Q[64進数]]を意味します。特に大文字で [Q[<strong>Base64</strong>]] と書いた場合や、インター {46} Content-Transfer-Encoding #?SuikaWiki/0.9 [[MIME]] [[実体]]の頭領域で、実体に使われている 内容転送符号化 ― CTE を示します。 CTE が使われていない時は、 使っているオクテット種を示します。http://suika.fam.cx/~wakaba/-temp/wiki/wiki?Base64
■よく検索されるキーワード
perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 11.755419s / load averages: 0.16, 0.18, 0.17
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク