scala play framework 2.2.6编码问题
scala play framework 2.2.6 encoding issue
我在申请中得到了一个表格。我在那里输入了俄罗斯和中国的符号。从浏览器到应用程序的 Http 请求如下所示:
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
密钥的应用程序——结果仍然相同。
那么我怎样才能正确记录我的东西呢?我可能错过了什么?
它无助于即时将我的字符串从一种编码转换为另一种编码。它无助于将 UTF-8 传递给 Build.scala like that
中的 scalac 选项
所以我刚刚在启动 java 服务时通过了 -Dfile.encoding=UTF-8。
我在申请中得到了一个表格。我在那里输入了俄罗斯和中国的符号。从浏览器到应用程序的 Http 请求如下所示:
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
密钥的应用程序——结果仍然相同。
那么我怎样才能正确记录我的东西呢?我可能错过了什么?
它无助于即时将我的字符串从一种编码转换为另一种编码。它无助于将 UTF-8 传递给 Build.scala like that
中的 scalac 选项所以我刚刚在启动 java 服务时通过了 -Dfile.encoding=UTF-8。