`

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

阅读更多

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

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

     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),配合改进的...

    JSP乱码 N种解决方案

    在开发Java Web应用程序时,JSP(JavaServer Pages)页面经常遇到字符编码问题,导致页面显示乱码。本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码...

    magicajax0.3.0解决中文乱码

    首先,我们需要了解中文乱码产生的原因。在Web通信过程中,数据的编码和解码不一致是导致乱码的主要因素。在Ajax请求中,数据通常以UTF-8格式发送,但如果服务器端或客户端的字符编码设置不正确,就可能导致乱码。...

    ppt,word乱码解决字体

    这样,当文件在没有相应字体的电脑上打开时,字体信息会随文件一起传输,避免乱码。 - 在Word中,通过“文件”-&gt;“选项”-&gt;“保存”,勾选“嵌入TrueType字体”。在PPT中,选择“文件”-&gt;“选项”-&gt;“保存”,勾选...

    解决Arcgis10.2.2中dbf文件用EXCEL打开乱码问题

    dbf文件是Esri的地理信息系统软件ArcGIS中用于存储表格数据的格式,通常与.shp文件一起使用,构成矢量图层的一部分。这种乱码现象可能是由多种原因引起的,包括编码不匹配、系统设置不当或者Excel与ArcGIS之间的兼容...

    解决mysql乱码

    ### 解决MySQL乱码 在使用MySQL数据库的过程中,可能会遇到字符显示乱码的问题。乱码问题通常是由于字符集设置不正确或不匹配所导致的。本文将详细介绍如何解决MySQL中的常见乱码问题,并提供实际的操作步骤。 ###...

    中文乱码解决.rar

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

    aa.rar_乱码加密_加密 乱码

    在标题"aa.rar_乱码加密_加密 乱码"中,我们可以推断出这个压缩包包含了至少两个加密过的文本文件,即"文件加密.txt"和"www.pudn.com.txt"。这种加密方式使得文件内容在未解密的情况下显示为乱码,确保了数据的保密...

    关于处理中文乱码问题 Filter 代码

    在IT行业中,中文乱码问题是一个常见的困扰,尤其是在处理文本数据时。本文将重点解析“关于处理中文乱码问题 Filter 代码”的相关知识点,并结合Java Servlet API进行详细讲解。 首先,我们要理解什么是Filter...

    Spire.Pdf无水印 解决pdf转化图片中文乱码的问题

    在本文中,我们将探讨如何使用`Spire.Pdf`解决PDF转换为图片时中文乱码的问题,以及如何去除PDF中的水印。 1. **PDF到图片转换中文乱码问题**: 当PDF文档包含中文字符,特别是由某些特定软件生成的PDF,在转换为...

    jsp资料基础知识分页和乱码处理

    首先,让我们深入了解一下JSP的基础知识。JSP的核心在于它将业务逻辑和页面展示进行了分离,这使得开发者可以专注于页面设计的同时,将数据处理和业务逻辑交给Java代码来处理。JSP页面由两部分组成:静态内容(如...

    解决WORD2003显示公式乱码的字体

    在使用Microsoft Word 2003处理文档时,有时可能会遇到公式显示为乱码的问题,这通常是由于缺少必要的字体导致的。Word 2003中的公式编辑器使用了特定的数学字体,如“MathJax TeX”或“Cambria Math”,如果系统中...

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

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

    jsp文件上传,解决中文乱码

    接下来,我们将深入探讨如何解决`JSP文件上传`时的中文乱码问题。 首先,我们需要理解文件上传的基本流程。在`JSP`中,通常会使用`&lt;form&gt;`标签的`enctype="multipart/form-data"`属性来定义一个支持文件上传的表单...

    ZipUtil文件压缩工具类(解决中文乱码)

    这个工具类的实现通常会结合`ZipOutputStream`一起使用,以创建和写入ZIP文件。 中文乱码问题在很多编程场景下都是一个棘手的问题,尤其是在处理文件名或路径名时。在ZIP格式中,如果编码方式不正确,可能会导致...

    过滤器实现get请求乱码问题

    在Java Web开发中,我们经常会遇到GET请求参数乱码的问题,尤其是在处理包含中文字符的URL时。这个问题可以通过使用Servlet Filter来解决。过滤器(Filter)是Java Servlet API的一部分,允许我们在请求到达目标...

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

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

    mp3歌词乱码转换器

    "mp3歌词乱码转换器"就是为了解决这个问题而设计的工具,它能够帮助用户正确地显示和转换MP3文件中的乱码歌词,确保我们享受音乐的同时,也能理解歌曲的情感表达。 MP3歌词通常以LRC(Lyrics)格式存储,这是一种...

    cuecode 乱码转换

    《CUE码与乱码转换详解》 在数字音频领域,CUE文件是一种常见的辅助文件,主要用于指示光盘映像中的音轨位置和信息。...通过理解乱码产生的原因和掌握相应的处理技巧,我们可以更顺利地管理和播放我们的数字音乐收藏。

Global site tag (gtag.js) - Google Analytics