关于Java开发Idea中编码,解码以及解决中文乱码的实践经验

前言

        关于这一块,特别是中文乱码,网上教程多得不能再多了,大家各抒己见,各种有着自己的实践经验和体会,但是吧,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对一个请求返回中文字符串。

 解决Servlet的response的中文乱码

 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.

如下 

引用

idea设置-----编码格式设置_翱翔的小菜鸟的博客-CSDN博客_idea编码格式设置

 IDEA控制台乱码问题,原因&解决方式,解决不了算我输_逆光影者的博客-CSDN博客_idea控制台乱码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值