2015-10-30 100 views
3

我在應用程序中獲得了一個表單。我輸入俄羅斯和中國符號。從瀏覽器到應用程序Http請求是這樣的:scala播放框架2.2.6編碼問題

POST /payout/process HTTP/1.0 
Host: my_host 
X-Real-IP: 10.3.4.6 
X-Forwarded-For: 10.3.4.6 
X-Forwarded-Proto: https 
Connection: close 
Content-Length: 286 
Accept: */* 
Origin: https://my_host 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.130 Chrome/43.0.2357.130 Safari/537.36 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: https://my_host 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8,ru;q=0.6 
Cookie: piwikExternalId=; COOKIEPOO="d14ef459332e84ab12f8187181e01e50df3abd61-5d635c8478334352d2865b11dd747d6d3fe84704=1&d6e2c1ad27a45b7d9b8ed7b039ab96c7d3ef8051=1&7cf1199693fa6d40bf3654db17ec4773e0d61f38=1" 

group=27&qwipi.customer_name=%D1%84%D1%8B%D0%B2&qwipi.bank_code=%E6%8B%9B%E5%95%86%E9%93%B6%E8%A1%8C&qwipi.bank_branch=%D1%84%D0%B2%D0%B0&customer_purse=%D1%84%D1%8B%D0%B2%D0%B0&qwipi.bank_city=%D1%84%D0%B2%D1%8B%D0%B0&qwipi.bank_province=%E6%8B%9B%E5%95%86%E9%93%B6%E8%A1%8C&amount=546 

退房請求體,參數customer_name。解碼它會給фыв。切出參數bank_branch。解碼它將給招商銀行。 我登錄到控制檯,並graylog這樣的要求:

def logRequest(request: Request[AnyContent]) { 
    request.body match { 
    case AnyContentAsFormUrlEncoded(data) => Logger.info(data.toString()) 
    case AnyContentAsText(text) => Logger.info(text + ", ") 
    case other => Logger.info(other.toString()) 
    } 
} 

,我得到這樣的

body: 'qwipi.bank_code' => '??????', 'qwipi.bank_province' => '??????', 'qwipi.customer_name' => '??????', 'amount' => '654', 'qwipi.bank_branch' => '??????', 'qwipi.bank_city' => '??????' 

即所有非拉丁字符轉質疑跡象。

echo $LANG輸出en_US.UTF-8,所以我想我的應用程序的編碼(無論這意味着什麼 - 應用程序本身或java的或playframework的或別的)不同。

這是我的嘗試:

def logRequest(request: Request[AnyContent]) { 
    Logger.info(new String(appendRequestData(request).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)) 
} 

即,得到了在UTF-8字節數組,把它變成其是UTF-8以及字符串。但沒有任何改變。

我還試過的是開始一個應用程序通過-Dfile.encoding=UTF8鍵 - 結果仍然相同。

那麼如何才能讓我的東西正確記錄?我可能錯過了什麼?

回答

3

它並沒有幫助將我的字符串從一種編碼轉換爲另一種編碼。它並沒有幫助將UTF-8傳遞到Build.scala中的scalac選項like that

所以我剛剛通過-Dfile.encoding = UTF-8啓動我的java服務時。