java 字符串中文乱码解决合集

可以肯定的说出现了中文乱码这种问题,基本上都是因为字符的编码、解码的格式不同。

常见的编码格式 ASCII、ISO-8859-1、GB2312、GBK、UTF-8(推荐)、UTF-16

Question 1 文档乱码

eclipse 编辑页面出现中文乱码,诺,就是下面这种,一般来说eclipse是默认GBK编码的,当有时候我们导入了UTF-8编码的工程就容易出现这种情况。

java 字符串中文乱码解决合集_第1张图片

通常我们最好在刚安装好eclipse的时候就统一设置为UTF-8。不然项目文件有的是GBK有的是UTF-8就难受了。格式不统一,难受。

java 字符串中文乱码解决合集_第2张图片java 字符串中文乱码解决合集_第3张图片

eclipse 设置编码格式

window > preferences > general > WorkSpace 

java 字符串中文乱码解决合集_第4张图片

window > preferences > general > Content Types

java 字符串中文乱码解决合集_第5张图片

工程文件夹下

右键 >properties > resource 

java 字符串中文乱码解决合集_第6张图片

上述的操作只会对新增的文件有效。并不会解决我们的乱码问题。

这种text文档出现乱码,很难搞,而且很容易发生不可逆的变化,如果需重新设置编码的时候最好备份。

当然还有一个补救措施,在单个文件下

右键 >properties > resource  

这个操作会改变当前文件的解码方式。如果没有对应格式可以手动添加。

当然,有些时候也是然并软

java 字符串中文乱码解决合集_第7张图片

java 字符串中文乱码解决合集_第8张图片

效果如下:

java 字符串中文乱码解决合集_第9张图片

各IDE设置应该都差不多,安卓studio还会自动检测,看着点就行了,就eclipse坑。

Question 2 网页乱码

  ......我都对这种乱码没印象了

设置为一样的就完事了,当然前提是这种编码格式支持中文,不然照样还是会有中文乱码。

java 字符串中文乱码解决合集_第10张图片

还有servelt中。。。

response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setContentType("application/json; charset=utf-8");

Question 3 流乱码

java IO流要是出现乱码基本也是编码、解码格式设置不统一的问题,基本上我们加上一层格式设置就ok了

new String(s1.getBytes("编码格式"), "解码格式");

如果自己没有设置的话,采用的就是默认设置,所以要想不会出现乱码,自己最好加上一层统一格式设置。

package J;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

public class Test {
	//ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16
	public static String ENCODING_UTF8 = "UTF-8";
	public static String ENCODING_GBK = "GBK";
	public static String ENCODING_GB2312 = "GB2312";

	public static void main(String[] args) throws UnsupportedEncodingException {
		// TODO Auto-generated method stub
		//
		System.out.println("默认的编码格式" + Charset.defaultCharset());
		testOne();

	}

	public static void testOne() throws UnsupportedEncodingException {
		String s1, s2, s3, s4;
		s1 = "你好 hello world";
		s2 = new String(s1.getBytes(ENCODING_GB2312), ENCODING_GB2312);
		s3 = new String(s1.getBytes(ENCODING_UTF8), ENCODING_UTF8);
		s4 = new String(s1.getBytes(ENCODING_GBK), ENCODING_GBK);

		System.out.println("s1:" + s1);
		System.out.println("s2:" + s2);
		System.out.println("s3:" + s3);
		System.out.println("s4:" + s4);
	}

}

 

你可能感兴趣的:(那些年我们一起踩过的坑)