Я прочитал пост " Кто устанавливает тип содержимого ответа в Spring MVC (@ResponseBody) ", это помогло мне решить мою проблему отображения данных UTF-8 (символы CJK) на клиенте сторона, использующая метод JSON.
Теперь обнаружите, что у меня проблема с отправкой данных в формате UTF-8 на серверную часть с помощью JSON. Метод JavaScript, который я использую:
function startSomething() {
console.log("startSomething()");
console.log(" getOriginName() = " + getOriginName());
console.log(" getDestinationName() = " + getDestinationName());
$.ajaxSetup({ scriptCharset: "utf-8" ,
contentType: "application/json; charset=utf-8"});
// send the data to server side
$.ajax({
url: "/mywebapp/something/start",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {
originName : getOriginName(),
destinationName : getDestinationName()
},
success: function(response) {
// do something
}
});
}
После запуска метода javascript я могу видеть значение, правильно выведенное на консоль браузера, например:
getOriginName() = N Bridge Rd
getDestinationName() = 夢幻之城@ Boat Quay
Код моего сервера:
@RequestMapping("/something")
@Controller
public class TestController {
// the logger
private Logger logger = Logger.getLogger(TestController.class);
@RequestMapping(value = "/start", method = RequestMethod.GET)
public ResponseEntity<String> start(@RequestParam String originName,
@RequestParam String destinationName,
HttpServletRequest request,
HttpServletResponse response) {
String characterEncoding = request.getCharacterEncoding();
String contentType = request.getContentType();
logger.debug(" characterEncoding = " + characterEncoding);
logger.debug(" contentType = " + contentType);
if (logger.isDebugEnabled()) {
String logMessage = StringUtils.join(
new Object[]{
" originName = ", originName,
" destinationName = ", destinationName
}
);
logger.debug(logMessage);
}
...
}
}
Вывод моего серверного кода:
TestController - characterEncoding = UTF-8
TestController - contentType = application/json; charset=utf-8
TestController - originName = N Bridge Rd destinationName = 夢幻ä¹å@ Boat Quay
Вы можете видеть, что кодировкой запроса является UTF-8, но значение на стороне клиента является неправильно закодированным символом CJK.
Что здесь может пойти не так? Пожалуйста, дайте мне несколько советов, спасибо.
George