我有一個Map,LinkedHashMap更準確。 我想把一個字符串對象給它。 然後我讀取這個值來查看實際存儲的內容。 該字符串本身具有非ASCII字符(西里爾文,韓文等)。 一旦我把它放到地圖然後閱讀,這些字符被替換爲???。 部分代碼:爪哇地圖,如何正確地把UTF-8字符串放到地圖上?
Map obj = new LinkedHashMap();
System.out.println("name: " + getName()); // prints "i4niac_сим_sim"
obj.put("name", getName());
System.out.println("written stuff: " + obj.get("name")); // prints i4niac_???_sim
這裏有什麼竅門? 我正在使用此映射使用json-simple創建JSON對象並將其從服務器發送到客戶端。
更新:
呃,對不起,所有的混亂。 首先我責備數據存儲,然後映射,最終,如預期的那樣,這是我的錯在另一個地方。 我在App Engine中設置內容類型發送JSON數據作爲「應用/ JSON」
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
// ...
resp.setContentType("application/json");
resp.getWriter().println(jsonObj.toString());
}
它只是不會發送它爲UTF-8,不管我試過後端一側技巧。 改變到
resp.setCharacterEncoding("UTF-8");
後我終於接收到針對非ASCII字符的UTF-8轉義碼。
請在您正確打印結果顯示其他UTF-8字符串的終端?這可能是一個字體問題... – 2011-05-13 14:50:23
嗨,你可以看到我已經完全改變了這個問題。 從數據存儲區正確讀取數據,我的錯誤忽略了它。問題在於使用Map,我把UTF-8字符串放在那裏,然後變得「醜陋」。 – i4niac 2011-05-13 15:11:56
查看編碼的系統屬性。我的意思是來自同一個程序的System.getProperty(「file.encoding」)(JVM)。 – ssedano 2011-05-13 15:14:21