`

那些年我们一起"日过的"乱码

阅读更多

    上一篇博客,介绍了流的使用,本节来说一下乱码的处理。数据流到了一处,你怎样解码,或者怎么编码,遵照什么规范,就会涉及到乱码的情况。

     计算机底层是用二进制来存储数据的,

     1、首先我们先不考虑服务器浏览器的情况,只考虑本地

        <1>

             //解码byte-char
		String str="中国";///使用eclipse平台默认(GBK)
		//编码,char到byte
		byte[] data=str.getBytes();//使用eclipse平台默认(GBK)
		
		//解码
		System.out.println(new String(data));//输出中国:编码与解码一致

 

      <2>编码用了utf-8,解码却使用默认的编码(GBK)

                 data=str.getBytes("utf-8");
		
		System.out.println(new String(data));//输出乱码,不一致

      涓浗

      <3>

	data=str.getBytes("utf-8");
		
		System.out.println(new String(data,"utf-8"));

       输出:中国

 

      <4>

     

String str="中国";
		System.out.println(str.length());
		byte[] data=str.getBytes();
		System.out.println(new String(data,0,str.length()-1));//字节数据缺失,乱码

        输出:?

        

     <5>、补充一下字节流和字符流的转化InputStreamReader(InputStream),OutputStreamWriter(OutputStream)

    

		BufferedReader br=null;
		br=new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:/xp/test/Demo1.java")),"utf-8"));
		String str=null;
		BufferedWriter bw=new BufferedWriter(new FileWriter(new File("F:/xp/test/Demo11.txt")));
		while(null!=(str=br.readLine())){
			System.out.println(str);
			bw.write(str);
			bw.newLine();
		}
		bw.close();
		br.close();

    把一个文件的字符拷贝到另外的一个文件。

 

    2、网络情况下的乱码

     新建一个Servlet

public class EncodingServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public EncodingServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String meg="中国";
		OutputStream osOutputStream=response.getOutputStream();
		osOutputStream.write(meg.getBytes("utf-8"));
		//为了全球通用设为utf-8
	}

	 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

 

  serlvet写给浏览器的98 99(utf-8).不告诉浏览器,用GBK查98 99(GBK) 是 涓浗。

改正方式1:改浏览器的码表(不好,用户可没这么聪明)

改正方式二:response设定编码方式:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
                response.setHeander("content-type","text/html:utf-8");//浏览器打开方式
		String meg="中国";
		OutputStream osOutputStream=response.getOutputStream();
		osOutputStream.write(meg.getBytes("utf-8"));//程序输出方式
		//为了全球通用设为utf-8
	}

 

程序以什么码表输出了,就一定要用什么码表打开。

 

改正方式三:jsp里有这个标签:<meta http-equiv="Content-Type" content="text/html; charset=utf-8">来设定编码,我们可以把这个标签来写给浏览器,来让浏览器来解析这个东西,知道怎么编码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String meg="中国";
		OutputStream osOutputStream=response.getOutputStream();
                 osOutputStream.write("meta http-equiv="Content-Type" content="text/html;cha
                   rset="utf-8"
".getbytes());
		osOutputStream.write(meg.getBytes("utf-8"));
		//为了全球通用设为utf-8
	}

      不用http协议发送header,用html的meta标签模拟一个http响应头。

 

3、还有一个经典的问题:在ServletdoGet方法里

OutputStream osOutputStream=response.getOutputStream();
		osOutputStream.write(1));

  任然会得不到1,是因为,1是个int型数字,不涉及到编码,而浏览器还傻不拉唧的去找1对应的汉字,就得到的不是1了。

如果这样改

OutputStream osOutputStream=response.getOutputStream();
		osOutputStream.write("1");

 就能输出1了,输出之前会编码

以上就是乱码的一些情况,与君共勉

    

分享到:
评论

相关推荐

    乱码查看器

    改进的混合乱码识别算法(多种乱码混合在一起时可以正确识别不同乱码) 单键解码功能:只要选中需要察看的乱码文本(如果不选中任何内容,则会自动全选), 然后按下预先设定的热键(默认为F7),配合改进的...

    乱码查看器CodeView v2.60

    改进的混合乱码识别算法(多种乱码混合在一起时可以正确识别不同乱码) 单键解码功能:只要选中需要察看的乱码文本(如果不选中任何内容,则会自动全选), 然后按下预先设定的热键(默认为F7),配合改进的...

    Maven发布Jar包中文乱码解决方法

    主要介绍了Maven发布Jar包中文乱码解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    国际C乱码大赛 源码

    学习C语言的人大概都知道国际C乱码大赛吧。这是各界C乱码大赛的获奖作品。让我们这些热爱C语言的人一起体会一下大师们的智慧吧。

    读写json中文ASCII乱码问题的解决方法

    下面小编就为大家带来一篇读写json中文ASCII乱码问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java Http请求传json数据乱码问题的解决

    主要介绍了Java Http请求传json数据乱码问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    中文乱码解决.rar

    TortoiseCVS-1.12.5及中文乱码解决方法,适用于win10 决TortoiseCVS中文乱码必备,解决方法; 第一:卸载和TortoiseCVS安装一起安装的CVSNT。 第二:安装本版本CVSNT: cvsnt-2.5.03.2382

    阿里云缺失字体文件导致乱码问题处理

    阿里云ecs生产图片乱码解决处理办法,及字体文件,都打包一起了。

    C#(.net)中按字节数截取字符串最后出现乱码问题的解决

    这样当然是乱码。尤其出现中文时候。 对这类数据处理当然要用统一的编码来处理。下面话不多说了,来一起看看详细的介绍吧 例子:1 string msg= Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(strcode)); ...

    永久解决VSCode终端中文乱码问题

    主要介绍了永久解决VSCode终端中文乱码问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    多语言转译转义工具 比如在日文系统下 用中文工具等 编码乱码带来的麻烦 很有用的工具 和大家一起分享

    多语言转译转义工具 比如在日文系统下 用中文工具等 编码乱码带来的麻烦 很有用的工具 和大家一起分享

    MySQL乱码终极解决方案

    解决MYSQL数据库中的乱码问题,总结出来的重点,欢迎大家一起分享东西!

    jsp常用经典代码(md5java实现,生成中文/数字验证码,解决中文乱码)

    jsp常用经典代码(md5java实现,生成中文/数字验证码,解决中文乱码) 自己平时收集的好资料和大家一起分享!!

    彻底搞懂 python 中文乱码问题(深入分析)

    现在有的小伙伴为了躲避中文乱码的问题甚至代码中不使用中文,注释和提示都用英文,我曾经也这样干过,但这并不是解决问题,而是逃避问题,今天我们一起彻底解决 Python 中文乱码的问题。 基础知识ASCII 很久很久...

    PropertiesLoaderUtils 出现中文乱码的解决方式

    主要介绍了PropertiesLoaderUtils 出现中文乱码的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    UTF-8使用纯真IP数据库乱码问题

    近手头在写一个根据IP地址返回省份地区的代码,发现在使用纯真ip数据库的时候出现乱码,后发现纯真数据库是居于GBK编码的,而我的整个工程编码都是采用的UTF-8编码,两个走到一起肯定会出现乱码,所以只能改写纯真...

    Ubuntu 系统中文显示乱码的问题解决

    通过查找相关的资料发现可能是因为系统没有配置中文字符编码的原因,下面这篇文章就来详细介绍了Ubuntu系统中文显示乱码的问题解决方法,需要的朋友可以参考借鉴,下面来一起看看吧。

    解决linux下vim中文乱码的方法

    在vim中编辑一个中文文本时,有时候看起来有乱码,以前都是修修补补的弄没有乱码了就不管了,这个问题一直都很困扰我。突然想到这个问题想把它给解决掉,在网上有很多这方面的资料,但是说得不是很到位,经过了一天...

    Intellij IDEA 2019 最新乱码问题及解决必杀技(必看篇)

    大家在使用Intellij IDEA 的时候会经常遇到各种乱码问题,今天小编给大家分享一些关于Intellij IDEA 2019 最新乱码问题及解决必杀技,感兴趣的朋友跟随小编一起看看吧

    完美解决JS中汉字显示乱码问题(已解决)

    如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和JS中乱码相关的问题都发到这里把,大家一起研究。:) 场景一:write写出来的内容是utf-8格式的,如果保存的write数据中有不是utf-8...

Global site tag (gtag.js) - Google Analytics