赞
踩
关于这一块,特别是中文乱码,网上教程多得不能再多了,大家各抒己见,各种有着自己的实践经验和体会,但是吧,idea这东西,本身也做为IDE,集成开发环境,里面的很多配置对用户来说唯有API设置是可见的,于是就有一系列的设置来解决IDE上的问题。
编码,在设置以xxx格式编码时,比如在一个文本下,输入一个hello,并设置编码形式是"UTF-8",那么这个文本就是“UTF-8”编码格式下的"hello"。
解码:在上面的基础上,“utf-8”编码下的文件当然要对应用"utf-8"来进行解码。
总之:编码和解码的格式要保持一致。“UTF-8”的文件用“GBK”打开当然是会出现中文乱码的。
这点当我在使用tomact服务器打印日志时出现了这个问题。
idea中关于编辑器的编码设置
File/Directory Encoding 优先于 Project Encoding,Project Encoding 优先于 Global Encoding 。
试想这样一个常见的场景,servlet对一个请求返回中文字符串。
response设置使用编码为“utf-8”,这样在Idea的编辑器里返回中文字符,哪所写的中文字符到底是编辑器的编码方式还是response里设置的编码方式?
答案是:为response里设置的编码方式(经过我测试,java文件是UTF-8编码,response里设置成GBK,则response里的中文为response里设置的编码)
测试如下:Response设置成GBK
- package com.cast.web;
-
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.io.PrintWriter;
-
-
- @WebServlet(value = "/test")
- public class test extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException ,IOException
- {
- //第一种方式
- response.setContentType("text/html;charset=GBK");
-
- //第二种方式
- // response.setCharacterEncoding("utf-8");
- // response.setHeader("Content-Type","text/html;charset=UTF-8");
- PrintWriter printWriter =response.getWriter();
-
-
-
- printWriter.write("你好,世界!");
- printWriter.flush();
-
- printWriter.close();
-
- }
- }
编辑器里对该文件设置编码为UTF-8
查看网页的解码
结果是正确的。
若设置java文件编码为utf-8,控制台打印代码里的中文的提示语句。 控制台解码默认是系统的编码为"GBK"。用“GBK”的方式进行解码,则肯定为中文乱码。
使得控制台显示中文字符时的解码格式与中文字符的编码格式一致。
第一种:把编辑器设置成与控制台相对应的编码。控制台默认是GBK,则编辑器也为GBK。
第二种:把控制台编码设置为编辑器设置的编码。编辑器为UTF-8,则控制台也为UTF-8.
如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。