2015-06-26 55 views
1

當我在服務器端沒有setCharacterEncoding發送信息到我的頁面時,我得到фыв。用setCharacterEncoding(UTF-8),我得到ыва。如何更正POST查詢的更改字符編碼?如何糾正郵政查詢的更改編碼?

P.S .:我從ServletInputStream中讀取數據。

下面的代碼。

doPost 
req.setCharacterEncoding("UTF-8"); 
BufferedReader r = new BufferedReader(new InputStreamReader(req.getInputStream())); 
String line; 
while ((line = r.readLine()) != null) { 
    System.out.println(line); 
} 

回答

1
BufferedReader r = new BufferedReader(
    new InputStreamReader(req.getInputStream(), StandardCharsets.UTF_8)); 

用的getInputStream你有二進制數據,而無需編碼。因此二進制到文本橋接類InputStreamReader需要正確的編碼。否則它使用系統默認的System.getProperty("file.encoding")

+0

它的工作原理。謝謝。但是,如果我直接從流中讀取?使用'ServletInputStream.readLine'函數。 – wtrclr

+0

然後'String line = new String(bytes,off,result,StandardardCharsets.UTF_8)'。 –