У меня есть карта, точнее LinkedHashMap.
И я хочу поместить в него строковый объект.
А потом я читаю это значение, чтобы увидеть, что на самом деле хранится.
Сама строка имеет символы не ascii (кириллица, корейский и т. Д.).
Как только я помещаю это в карту и затем читаю, эти символы заменяются на ??? s.
Какой-то код:
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 с помощью json-simple и отправки его с сервера на клиент.
Обновление:
Тьфу, извини за весь этот беспорядок.
Сначала я обвинил хранилище данных, затем карту, наконец, как и ожидалось, это была моя вина в другом месте.
Я отправлял данные json в движке приложения, задавая тип контента как «application / json»
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
// ...
resp.setContentType("application/json");
resp.getWriter().println(jsonObj.toString());
}
Он просто никогда не отправлял его как UTF-8, независимо от того, какие трюки я пробовал на стороне сервера
После изменения на
resp.setCharacterEncoding("UTF-8");
Наконец-то я получил escape-коды UTF-8 для не-ascii символов.