我有一个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