中文编码问题一直都比较麻烦,这次我写Servlet 的时候再次遇到了这个问题
MySQL编码格式为UTF8,刚开始的时候Servlet 并没有做相应的接收处理,所以一直出现编码问题。查询之后发现,当 setCharacterEncoding为null时,浏览器则采用ISO-8859-1的方式来进行重新的编码。所以在Servlet 接收的时候需要指定编码格式。
下面是我的代码,接收URI请求,查询数据库,并且通过Json返回数据,返回的编码是UTF8的。
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String name = new String(req.getParameter("name").getBytes("ISO-8859-1"),"GBK");
JPlaceInfo placeInfo = DaoActivity.getPlaceInfo(name);
JSONStringer stringer = new JSONStringer();
try {
stringer.array().object();
stringer.key("name").value(placeInfo.getName()).
key("tag").value(placeInfo.getTag()).
key("time").value(placeInfo.getTime()).
key("address").value(placeInfo.getAddress()).
key("image").value(placeInfo.getImage());
stringer.endObject().endArray();
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
resp.getOutputStream().write(stringer.toString().getBytes("UTF-8"));
resp.setContentType("text/json; charset=UTF-8");
}