我有一個Java servlet通過HTTP GET請求從上游系統接收數據。該請求包含一個名爲「text」的參數。如果上游系統這個參數設置爲:servlet請求參數字符編碼
TEST3 please ignore:
它出現在上游系統的日誌爲:
00 54 00 45 00 53 00 54 00 33 00 20 00 70 00 6c //TEST3 pl
00 65 00 61 00 73 00 65 00 20 00 69 00 67 00 6e //ease ign
00 6f 00 72 00 65 00 3a //ore:
(該//註釋實際上並不出現在日誌)
在我的servlet我讀這個參數:
String text = request.getParameter("text");
如果我打印的值3210到控制檯,它顯示爲:
T E S T 3 p l e a s e i g n o r e :
如果我在調試器檢查的text
的價值,它顯示爲:
\u000T\u000E\u000S\u000T\u0003\u0000 \u000p\u000l\u000e\u000a\u000s\u000e\u0000
\u000i\u000g\u000n\u000o\u000r\u000e\u000:
如此看來,有一個與字符編碼的問題。上游系統應該使用UTF-16。我的猜測是這個servlet使用UTF-8,因此讀取的字符數應該是它的兩倍。對於消息「TEST3請忽略:」每個字符的第一個字節是00
。當被servlet讀取時,這被解釋爲一個空間,它解釋了當servlet記錄消息時每個字符之前出現的空間。
顯然,我的目標很簡單,就是當我讀取text
請求參數時,簡單地得到消息「TEST3請忽略:」。我的猜測是,我可以通過指定請求參數的字符編碼來實現這一點,但我不知道如何做到這一點。
GET參數必須是ASCII或URL編碼,你不能在那裏使用一種特殊的字符集。 –
什麼是您的Web容器?什麼是你的HTML文件字符集? –
[This](http://stackoverflow.com/questions/3278900/httpservletrequest-setcharacterencoding-seems-to-do-nothing)可能會有所幫助。 –