The T World は UTF-8 で出力しているため、MTRSSFeedを使用する再、ソースとなるRDFファイルのエンコードもUTF-8のものしか正しく表示することができなかった。そこで、Rubyをつかって簡単なCGIスクリプトを作成し、CGI実行時に最新のRDFファイルを取得してUTF-8に変更するようにしてみた。
ファイル名 | getrss.rb |
---|---|
引数 | rss:ソースとなるRDFファイルのURI ie:ソースRDFファイルのエンコード oe:出力するエンコード |
使用例 | getrss.rb?http://www.randt.jp/index.rdf?ie=UTF-8?oe=UTF-8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#!/usr/bin/ruby ##!/usr/local/bin/ruby about = 'Made by bae $Id: getrss.rb,v 1.1 2004/11/17 15:08:14 tohru_i Exp $' require 'cgi' require 'net/http' require 'iconv' require 'uri' require 'rexml/document' arg = CGI.new srcuri = arg['rss'] if srcuri == "" p "Content-type: text/htmlnn" p about p "Invalid arguments" exit 0 end ie = arg['ie'] if ie == "" ie = 'UTF-8' end oe = arg['oe'] if oe == "" oe = 'UTF-8' end uri = URI.split(srcuri) resbody = '' Net::HTTP.version_1_2 Net::HTTP.start(uri[2], uri[3]) {|http| begin resdata = http.get(uri[5]) resbody = resdata.body rescue => ioerr p 'Content-type text/htmlnn' p "Exception caught!" p ioerr exit 0 end } begin document = REXML::Document.new(resbody) xmldecl = document.xml_decl xmldecl.encoding = oe rescue =>rescueDoc p 'Content-type text/htmlnn' p "Exception caught!" p about puts rescueDoc.success exit 0 end begin puts "Content-type: text/xmlnn" puts Iconv::iconv(oe, 'UTF-8', document.to_s) rescue =>rescuedoc p "Content-type: text/htmlnn" p "Exception caught!" p about p rescuedoc exit 0 end |
rexmlを使用しているが、rexml内でUTF-8に強制的に変換しているように思われる。また、Iconvは UTF-8 から EUC-JP, ISO-2022-JP の変換でほとんどの場合Exceptionを出す。したがって、作り的にはINPUT/OUTPUTは自由にエンコードを指定できるように見えるが、OUTPUTはUTF-8しか実用に耐えない。この辺りは残件。