Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Clojureでガラケーサイトを作る際の細かい話

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
サムネイルを作る話
サムネイルを作る話
Wird geladen in …3
×

Hier ansehen

1 von 24 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Andere mochten auch (15)

Anzeige

Ähnlich wie Clojureでガラケーサイトを作る際の細かい話 (20)

Anzeige

Aktuellste (20)

Clojureでガラケーサイトを作る際の細かい話

  1. 1. Clojure でガラケーサイトを 作る際の細かい話 Ikuru K
  2. 2. あるいは ,Shift_JIS がつらい 話 Ikuru K
  3. 3. 自己紹介 - 2016 年 5 月より Clojure プログラマとして勤務 - サイボウズスタートアップス株式会社所属 - https://github.com/iku000888 - https://twitter.com/iku000888 - メンテしているライブラリ: https://github.com/jkk/formative - 5 月 20 日に JJUG CCC で Arachne の話をします!
  4. 4. tl;dr - 今帰らなければいけない人のために - - 力の限り全力で utf-8 だけをサポートする用にしよう - これ以降は Clojure で Shift_JIS したい時の話
  5. 5. Agenda 1. 背景 2. フォームのデコードの話 3. 動的にクエリパラメータを生成する時の話
  6. 6. この時代に Shift_JIS? 安否確認サービス 2 => https://anpi.cstap.com/anpi2.html ガラケーからの利用をサポート => なるべく多くのガラケー端末をサポートし たい => 一部ガラケーでは未だに utf-8 使えないら しい =>Shift_JIS で作る
  7. 7. Shift_JIS の html テンプレート
  8. 8. 結果 問題無かった ! めでたしめでたし
  9. 9. 結果 問題無かった ! めでたしめでたし フォームで GET した値が化ける “ モジバケコワイ” => "���W�o�P�R���C"
  10. 10. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す
  11. 11. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す - " モジバケコワイ " =>
  12. 12. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す - " モ� W�o�P�R ワ� C"
  13. 13. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す - " モ� W�o�P�R ワ� C" - 惜しい !!( なにが
  14. 14. デバッグした (-> “ モジバケコワイ” ブラウザによる Shift_JIS の URL エンコード ) => "%83%82%83W%83o%83P%83R%83%8F%83C" 証拠 : http://d.hatena.ne.jp/keywordsearchmobile?word=%83%82%83W%83o%83P%83R%83%8F%83C (-> "%83%82%83W%83o%83P%83R%83%8F%83C" (java.net.URLDecoder/decode "Shift_JIS")) ;;params middleware の解読処理 => " モ� W�o�P�R ワ� C"
  15. 15. commons-codec 使えば正しくデコードできるらし い (.decode (URLCodec. "Shift_JIS") "%83%82%83W%83o%83P%83R%83%8F %83C") => " モジバケコワイ "
  16. 16. プロジェクト内での解決方法 問題のこの関数 https://github.com/ring-clojure/ring-codec/blob/master/ src/ring/util/codec.clj#L110 を alter-var-root で commons-codec を使った実装で上書 きした
  17. 17. alter-var-root
  18. 18. 余談: 6 年前に同じ問題に嵌っていた日本の方がい た https://groups.google.com/forum/#!topic/ring-clojure/7VibQRgXH-0
  19. 19. 2. クエリパラメーターを動的に作る話 - https://github.com/cemerick/urlを使用 - マップからクエリパラメーターを作れるので便利 - が、日本語文字列が化ける
  20. 20. 実装を見てみる
  21. 21. url 、お前もか。。。 (URLEncoder/encode "UTF-8")
  22. 22. こちらも alter-var-root! ※ 注:本来はエンコーディングを引数で受けとるようにするのが王道です
  23. 23. まとめ - Clojure 界隈は utf-8 以外のエンコーディングはあまり気 にしていない - Shift_JIS を URL エンコードできる Commons Codec は 偉大。人類の資産 - それをそのまま利用できる Clojure も偉大 - alter-var-root という逃げ道が非常に役に立つ
  24. 24. Thank you!

×