2008年7月 1日

[ruby-list:45173] Re: Win/UTF8のFile.basename

金井です。

Nobuyoshi Nakada <nobu@xxxxx> wrote:
> 内部で文字コードをどのように仮定しようが、システムコードページが
> 変わるわけではなく、File.basenameはシステムコードページで処理さ
> れます。UTF-8の"デスクトップ/ABC.DEF"は 6*3 = 18バイトになるので
> Shift_JISでもちょうどよさそうに思えますが、hexでみると以下のよう
> になります。

>
> 0000000 e3 83 87 e3 82 b9 e3 82 af e3 83 88 e3 83 83 e3 >................<
> 0000020 83 97 2f 41 42 43 2e 44 45 46 >../ABC.DEF<
>
> 途中のafが半角カナ領域になるため、そこで1バイトずれてしまい、最
> 後が"97 2f"という一文字と認識されてしまいます。1バイト目だけでな
> く2バイト目までチェックすれば防げる問題だとは思いますが、ここの
> 処理はWindowsで提供されているルーチンを使っているので、そういう
> ものなんでしょう。

File.basenameなどの中身は正規表現でやっているのだと思い込んで
いました。それがそもそもの間違いだったのですね。

CGIをLinux/Windowsの両方で動かさなければならなくて困っていたの
ですが、これで解決します。
どうもありがとうございました。

投稿者 xml-rpc : 2008年7月 1日 02:33
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/74831
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。