我該如何重寫urlFormEncoded
解析器以在Play 2.3.x(Scala)中使用另一個字符集?覆蓋字符集的urlFormEncoded解析器 - Play Framework 2.3.x
我正在寫Scala的Play framework 2.3.x在日文環境下工作的BBS軟件。
問題是關於charset:客戶端POSTs請求與編碼在Shift-JIS
- 日本着名字符集編碼的url編碼(也就是「百分比編碼」)形式參數 - 但播放解碼爲UTF-8
。這是可預測的,因爲它在https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/scala/play/api/mvc/ContentTypes.scala#L515中被硬編碼。
我不能修改BBS客戶端的編碼,因爲它是事實上的標準。
因此,我必須重寫或覆蓋使用Shift_JIS
的網址編碼解碼器。
可能有一些解決方案:
- 手工打造,從修改後的源代碼播放和使用它。
- 攔截請求並解碼主體爲
Shift_JIS
,然後將主體重新編碼爲UTF-8
。 - 創建自定義分析器,它擴展
play.api.mvc.BodyParsers.parse
並使用它。
我認爲最有希望的選擇是3,但是我無法創建object
,它延伸play.api.mvc.BodyParsers.parse
。
那麼,我該如何重寫默認解析器並使用它(或者還有其他更好的解決方案)?
謝謝。
它似乎很好,但沒有運行; '[錯誤]方法字符集需要一個穩定的,不可變的值 [錯誤]重寫def charset = rh.charset或者else some(defaultCharset)//或者總是使用Some(defaultCharset)如果你想要' – Qwilas 2015-03-25 13:05:04
我更新了答案至少編譯。 – kawty 2015-03-25 15:30:24