Encoding Format 处理编码问题

中文乱码

一般的,我们都会将项目和代码设置为 UTF-8 编码格式,但有时候还远远不够。

我们在 handle-json-xml项目的基础上,进行修改成为另外一个新项目。

将 MyResource.java 改为如下:

  1. @Path("myresource")
  2. public class MyResource {
  3. /**
  4. * 方法处理 HTTP GET 请求。返回的对象以"text/plain"媒体类型
  5. * 给客户端
  6. *
  7. * @return String 以 text/plain 形式响应
  8. */
  9. @GET
  10. @Produces(MediaType.TEXT_PLAIN)
  11. public String getIt() {
  12. return "Got it!";
  13. }
  14. /**
  15. * 方法处理 HTTP GET 请求。返回的对象以"application/xml"媒体类型
  16. * 给客户端
  17. *
  18. * @return MyPojo 以 application/xml 形式响应
  19. */
  20. @GET
  21. @Path("pojoxml")
  22. @Produces(MediaType.APPLICATION_XML)
  23. public MyBean getPojoXml() {
  24. MyBean pojo = new MyBean();
  25. pojo.setName("欢迎光临:waylau.com");
  26. pojo.setAge(28);
  27. return pojo;
  28. }
  29. /**
  30. * 方法处理 HTTP GET 请求。返回的对象以"application/json"媒体类型
  31. * 给客户端
  32. *
  33. * @return MyPojo 以 application/json 形式响应
  34. */
  35. @GET
  36. @Path("pojojson")
  37. @Produces(MediaType.APPLICATION_JSON)
  38. public MyBean getPojoJson() {
  39. MyBean pojo = new MyBean();
  40. pojo.setName("欢迎光临:waylau.com");
  41. pojo.setAge(28);
  42. return pojo;
  43. }
  44. }

启动项目,访问浏览器 http://localhost:8080/
点击“POJO JSON” 或者 “POJO XML”,显示如下,中文已乱。

7. Encoding Format 处理编码问题 - 图1

问题解决

在返回的数据里面,我们设置编码格式 charset=utf-8,关键代码如下:

  1. private final static String CHARSET_UTF_8 = "charset=utf-8";
  2. @GET
  3. @Path("pojoxml")
  4. @Produces(MediaType.APPLICATION_XML + ";" + CHARSET_UTF_8)
  5. public MyBean getPojoXml() {
  6. MyBean pojo = new MyBean();
  7. pojo.setName("欢迎光临:waylau.com");
  8. pojo.setAge(28);
  9. return pojo;
  10. }
  11. @GET
  12. @Path("pojojson")
  13. @Produces(MediaType.APPLICATION_JSON + ";" + CHARSET_UTF_8)
  14. public MyBean getPojoJson() {
  15. MyBean pojo = new MyBean();
  16. pojo.setName("欢迎光临:waylau.com");
  17. pojo.setAge(28);
  18. return pojo;
  19. }

再次访问浏览器,查看到所有的中文显示都正常了。

7. Encoding Format 处理编码问题 - 图2