`
alan0509
  • 浏览: 10726 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 编码,乱码,字符系列(2)

阅读更多

java编码方式及处理方法介绍

按照步骤运行下面代码:

System.out.println(Charset.defaultCharset());
 

所输出结果均已本地测试为准。不同操作系统可能输出结果不同

执行上述代码 :GBK   表明系统默认的编码方式为GBK

     打开记事本,新建一个文件。取名为 gbk.txt;之所以取名为gbk,是因为该文件是按照系统默认的编码方式编码,及GBK,文件内容为  :挨踢good

 

执行下述代码:

// gbk.txt use the default character encoding
		InputStream is1 = new FileInputStream("gbk.txt");
		InputStreamReader streamReader1 = new InputStreamReader(is1);
		char[] chars1 = new char[is1.available()];
		streamReader1.read(chars1, 0, is1.available());
		System.out.println(new String(chars1));

    输出结果:挨踢  bad

执行下述代码:

System.out.println("------------utf----------------");
		InputStream is = new FileInputStream("gbk.txt");
		InputStreamReader streamReader = new InputStreamReader(is, "utf-8");
		System.out.println("change encoding " + streamReader.getEncoding());
		char[] chars = new char[is.available()];
		streamReader.read(chars, 0, is.available());
		System.out.println(new String(chars));

  输出结果:------------utf----------------
                    change encoding UTF8
                    ????good

解释:在此处,当我们使用utf-8 编码方式读取文件gbk.txt时,文件出现乱码。是因为我们是用系统默认的“gbk”编码方式创建的文件。当用utf-8读取时,文件肯定出错。

 2,为什么 good 输出没有乱码?这与具体的编码方式有关,对于英文字母的处理,gbk 和utf-8采取的编码方式可以看做是没有出入的。具体可参http://alan0509.iteye.com/blog/729929

执行下述代码:

 

创建文件,utf8.txt,很明显,采用的编码方式是utf-8。文件内容为:上海世大咨询(在此,我没有加入英文。)

执行下面代码:

		System.out.println("------------utf----------------");
		InputStream is2 = new FileInputStream("utf8.txt");
		InputStreamReader streamReader2 = new InputStreamReader(is2);
		System.out.println("use gbk to read utf-8 "
				+ streamReader2.getEncoding());
		char[] chars2 = new char[is2.available()];
		streamReader2.read(chars2, 0, is2.available());
		System.out.println(new String(chars2) + chars2.length);

  输出结果:

------------utf----------------
use gbk to read utf-8 GBK
锘夸笂娴蜂笘澶у挩璇 21

可见,当我们读取一个文件时,如果不指定编码方式,将自动采用“系统默认的方式读取”。至此,我们发现第一个乱码问题:当我们读取文件时,有必要知道文件的编码方式。

     执行下面代码:

System.out.println("-----------use byte-----------------");
		File file2 = new File("utf8.txt");
		InputStream inputStream = new FileInputStream(file2);
		byte[] bs = new byte[(int) file2.length()];
		inputStream.read(bs);

		String s = new String(bs, "utf-16");
		System.out.print("use byte to read utf-8,and use utf-16 decode"
				+ "use utf-16  " + s);
		System.out.println();

		String s2 = new String(bs, "utf-8");
		System.out.print("use byte read utf-8,and utf-8 decode" + "use utf-8  "
				+ s2);
		System.out.println();

  输出结果:

-----------use byte-----------------
use byte to read utf-8,and use utf-16 decodeuse utf-16  ??????銨??
use byte read utf-8,and utf-8 decodeuse utf-8  ?上海世大咨询

结果解释:此处,我采取的方式是将文件中的内容以字节方式读取,然后针对字节进行编码。当我采用utf-16编码时并不能还原文件。当采用utf-8编码时能还原文件。但此处多出一个问号。具体原因将在后面文章中介绍。

执行下面代码:

System.out.println("------------utf----------------");
		File file = new File("utf8.txt");
		InputStream is3 = new FileInputStream(file);
		InputStreamReader streamReader3 = new InputStreamReader(is3, "utf-8");
		System.out.println(streamReader3.getEncoding());
		char[] chars3 = new char[is3.available()];
		streamReader3.read(chars3, 0, is3.available());
		System.out.println(new String(chars3));

  输出结果:

 ------------utf----------------
UTF8
?上海世大咨询                    注:问号问题将在后面介绍。

执行下面代码:

System.out.println("------------------------");
		String sp = "上海世大";
		// use default encodeing to get bytes
		byte[] bs2 = sp.getBytes();
		byte[] bs3 = sp.getBytes("utf-8");
		String string = new String(bs3, "utf-8");
		String string2=new String(bs2,Charset.defaultCharset());
		String string3 = new String(bs2, "utf-16");
		System.out
				.println("use default character encodeing,and then use utf-8 to decode    "
						+ string);
		System.out
		.println("use default character encodeing,and then use gbk to decode    "
				+ string2);
		System.out
		.println("use default character encodeing,and then use utf-16 to decode    "
				+ string3);

  输出结果:

 ------------------------
use default character encodeing,and then use utf-8 to decode    上海世大
use default character encodeing,and then use gbk to decode    上海世大
use default character encodeing,and then use utf-16 to decode    ????

可见当我们使用getbytes方法时,指定具体编码方式是有好处的。

 

对java处理编码的一点补充:

  • Java的class文件采用utf8的编码方式,JVM运行时采用utf16。(注意是java的class文件。.java文件并不是class文件,我们写的java文件在没有指定编码的情况下,将根据IDE工具指定的编码方式。一般情况下会采用系统默认的编码方式,所以我们的java文件拿到不同的机器上运行时可能出现乱码,具体原因上面文章有介绍。)
  • 请看我的第三篇文章。

 

 

 

分享到:
评论

相关推荐

    java 编码,乱码,字符系列(1)

    本文将围绕“Java编码与乱码”这一主题展开,探讨字符编码系列的第一部分。 首先,我们需要理解什么是字符编码。字符编码是计算机用于表示文字、符号等字符的方式,它为每个字符分配了一个唯一的数字,使得计算机...

    java中文乱码字符集解决大全.pdf

    2. Java编码转换的详细过程 Java程序的生命周期包括编写、编译和执行三个阶段: - **编写阶段**:开发者在特定操作系统(如中文Win2K)的文本编辑器中创建源代码文件(.java),文件通常按照系统默认编码(GBK)...

    免费_java中文乱码字符集解决大全

    乱码问题主要源自计算机操作系统的字符编码方式以及Java内部使用的UNICODE编码之间的转换过程。在深入解析这一过程后,我们可以透视Java中文问题产生的根本原因,并给出最优化的解决方案。 首先,计算机最初的操作...

    java中文乱码字符集解决大全

    ### Java中文乱码字符集解决大全 #### 一、中文问题的来源与背景 随着信息技术的发展,计算机系统从最初仅支持单字节字符编码(如ASCII),逐渐演变为支持多种多样的字符集,以满足全球不同语言的需求。这其中最...

    java_字符编码 Javajava_字符编码问题

    在 Java 中,`String` 类型是一种特殊的类型,它用来表示一系列字符的序列。Java 的 `String` 类内部是以 Unicode 编码存储的,这意味着每个字符都对应一个特定的 Unicode 码点。 #### 三、字符编码转换 在实际...

    Java中文乱码浅析及解决方案

    Java 中文乱码问题是一个常见的编程困扰,尤其对于处理中文字符的Java程序而言。这个问题通常源于字符编码的不一致,即不同环节采用的字符编码标准不统一。本文将深入探讨这一问题,并提供相应的解决方案。 首先,...

    java中文乱码解决问题

    这是因为在编译 Servlet 类或者 JSP 文件时,如果没有使用 -encoding 参数指定 Java 源程序的编码格式,javac 会获取本地操作系统默认采用的字符集,以该字符集将 Java 源程序转换为 Unicode 编码保存到内存中,然后...

    java中文乱码字符集.pdf

    理解和掌握Java编码转换的过程,以及如何适配各种环境,是解决Java中文乱码问题的关键。在开发和部署Java应用时,应确保编码的一致性,避免因编码不匹配导致的乱码现象,提高程序的可移植性和兼容性。

    Java字符集和编码

    为了处理不同编码格式的数据,Java提供了一系列的字符流和字节流类,如`InputStreamReader`和`OutputStreamWriter`等,它们可以将字节流转换为字符流,从而实现对各种编码格式的支持。 在实际开发中,理解字符集和...

    java字符过滤器,过滤器

    在Java中,字符乱码通常是由于字符编码不一致导致的。例如,一个以UTF-8编码的文件被误认为是GBK编码来读取,就会出现乱码现象。为了解决这个问题,Java提供了`java.nio.charset.Charset`、`java.io....

    免费 java中文乱码字符集处理大全.docx

    综上所述,理解Java编码处理机制以及中文乱码产生的原因,对于解决实际开发中的乱码问题至关重要。开发者应关注源代码的编码设置、文件读写和网络通信中的编码转换,以确保Java程序在各种环境下都能正确处理中文字符...

    java中文乱码大全

    Java中文乱码问题是编程者在开发Java应用程序时经常遇到的问题,尤其是涉及到中文字符处理时。这些问题产生的根本原因在于Java内部采用UNICODE编码,而不同的操作系统和浏览器可能支持不同的编码格式,如Windows中文...

    Java字符集编码简记

    在IT行业中,字符集编码是基础且至关重要的概念,尤其对于Java开发者来说,理解编码机制是处理各种文本数据的关键。本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1.pdf

    Java中的字符编码转换是编程实践中一个至关重要的概念,尤其是在处理多语言环境和跨平台交互时。Java通过统一采用UTF-16编码格式在JVM内部处理字符,简化了字符操作的复杂性。UTF-16是一种变长的Unicode编码,它可以...

    java中文乱码之解决URL中文乱码问题的方法

    总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...

    Java关于中文乱码问题的多种解决方法

    当Java程序读取或写入包含中文字符的文件时,需要设置正确的字符编码。例如,使用`FileReader`和`FileWriter`时,可以通过构造函数传入`Charset`对象,如`new FileReader(file, "UTF-8")`。如果使用`BufferedReader...

    JAVA及相关字符集编码问题

    在JAVA开发中,正确处理字符集编码至关重要,以避免乱码和数据不一致的问题。 一、ISO8859-1与ASCII ISO8859-1是一种单字节编码标准,通常用于西欧语言,其编码范围为0-255。在ISO8859-1中,ASCII字符集是其子集,...

    java中文乱码问题

    Java 中文乱码问题详解 ...要解决乱码问题,我们需要了解 Java 处理字符的原理,并了解编译和运行时的字符编码转换过程。在编译时,需要指定正确的编码类型;在运行时,需要正确地处理字符编码转换,以避免乱码的出现。

Global site tag (gtag.js) - Google Analytics