ramazeで文字コードをShift JISにするには(続き)

ramazeで文字コードをShift JISにするには - NAT’s Programming Champloo
また↑の続き。


トラックバック頂きました。

この場合だと,ビューに限らず文字コードが関係する所はShift_jisで用意したりとかになると思うので(flashとか),そういう所にフックを書けることは想定してないような(文字コードは大抵統一される).

Ramazeの事後処理 - はてなかよっ!

なるほど、文字コードが関係するところはShift JISで統一した方が、すっきりしそうですね。ありがとうございます。


というわけで、ソースファイルの文字コードをShift JISで統一するように修正してみました。
(1) ソースファイルの文字コードをShift JISに変換して、インタプリタに渡すオプションに -Ks を指定

#!/usr/local/bin/ruby -Ks

(2) 外部から入力する文字はtosjisメソッド(require 'kconv'必要)でShift JISに変換

url = 'http://spreadsheets.google.com/pub?key=pS_Iu-LTUb202uc2p8lQoOw&gid=0'
doc = open(url).read.tosjis

(3) レスポンスのヘッダにはShift JISを指定

  def layout
    %{
<?xml version="1.0" encoding="Shift_JIS"?>
<html>
# ...途中省略...
</html>
    }
  end
Ramaze::Global.content_type = 'text/html; charset=Shift_JIS'
Ramaze.start

と、こんな感じで修正しました。
明示的にtosjisメソッドで文字コード変換するのが(2)だけになるので、コードがすっきりしました。

ramazeで文字コードをShift JISにするには

<2008/9/23追記>
このエントリには、続きがあります。
ramazeで文字コードをShift JISにするには(続き) - NAT’s Programming Champloo
<追記終わり>


GoogleスプレッドシートをWebスクレイピングしてみた - NAT’s Programming Champloo
↑の続き。
一部の携帯端末で文字化けするとのコメントがあったので、対策することにした。
少しネット上でも検索してみたが、携帯向けコンテンツでは、文字コードはShift JISにした方がどの端末でも対応できるようなので、HTMLの方をShift JISに変えることにした。

とりあえず、require 'kconv'して、layoutメソッドでまとめて文字コード変換してみた。

  def layout
    %{
<?xml version="1.0" encoding="Shift_JIS"?>
<html>
<head>
<title>駅名しりとり 駅名一覧</title>
</head>
<body>
<h1>全国駅名しりとりラリー 携帯用駅名一覧</h1>
<%= @content.tosjis %>
</body>
</html>
    }.tosjis
  end

@contentとテンプレートの2つに対して tosjisメソッドを呼んでいる。
本当は、文字コード変換する場所を1箇所にするために、テンプレートを実行した後にまとめて文字コード変換したかったのだけど、やり方が分からない。こういう事後処理っぽい事を書くのに良い方法は、ramazeでは用意していないのかな。今度少し調べてみるか。

layoutメソッドの変更以外にも、HTTPヘッダのContent-Typeでも文字コードを指定するために、Ramze.startの前にコードを追加。

Ramaze::Global.content_type = 'text/html; charset=Shift_JIS'
Ramaze.start

とりあえず、これで文字コードはShift JISにできて、文字化けの問題は解決できたみたい。

GoogleスプレッドシートをWebスクレイピングしてみた

http://ittemia.jp/zensen/themes/view/39
ここで駅名しりとりをしていて、私も機会があれば投稿したいなぁと、列車で移動中とかに時々チェックしている。一回出た駅は使えないルールなので、取りに行けそうだと思っても、今までに出てないか気になる事がある。
http://spreadsheets.google.com/pub?key=pS_Iu-LTUb202uc2p8lQoOw&gid=1
このGoogleスプレッドシートで、今までに出た駅名一覧が登録されているのだけど、携帯電話から見に行くには、フルブラウザを使わなくてはいけなかったりで、なかなか難しい。
このGoogleスプレッドシートはHTMLで表現されているので、Webスクレイピングして必要な情報だけ抜き出せば、携帯電話から見れる形に変換するのも簡単そう。そう思いついたので、さっそくやってみた。

続きを読む

ramazeをCGIで使うときもセッションを使う(helper編)

ramazeをCGIで使うときもセッションを使う - NAT’s Programming Champloo
上記エントリで、セッションをファイルに格納するモジュールFileSessionManagerを作りました。その続きです。
ramazeなら、FileSessionManagerみたいなモジュールはhelperにした方が良いよ、とコメント頂いたので、自分用helperにしてみました。自分用helper(custom helper)の作り方は、教えて頂いた、下記のページを参考にしました。
http://ramaze.net/features:helpers#custom-helpers

続きを読む

ramazeをCGIで使うときもセッションを使う

ramazeのセッションは、セッションに格納した値をメモリ上に記憶して、クッキーにセッションIDを格納する方式みたい。そのため、リクエストのたびにプロセス起動/終了を繰り返すCGIでramazeを使うと、ramazeのセッションは使えない。
そこで、自前のセッションを作って、セッションに格納した値はファイルに記憶するようにしてみた。

続きを読む

夏休みの自由研究完了

今日で会社の夏休みが終了。
今日のエントリ2つは、夏休みの数日間で調べたり試した物をまとめたもの。ある意味、夏休みの自由研究ですな。
まぁ、小学生がやるような自由研究じゃないけどね・・・。いや、いまどきの小学生ならPCを使った自由研究とかやるのかな?