`

java编码分析

阅读更多

代码如下:       

        String str = "中文";
        byte[] utf8b = str.getBytes("UTF-8");
        byte[] gbkb = str.getBytes("GBK");

        // 没有乱码
        System.out.println(new String(utf8b, "UTF-8"));

        // 没有乱码
        System.out.println(new String(gbkb, "GBK"));

        // 有乱码

        System.out.println(new String(gbkb, "UTF-8"));

        // 有乱码
        System.out.println(new String(utf8b, "GBK"));

 

java中的String永远都是Unicode编码的,以它作为中间结果转化成各种不同的编码格式。

 

String str = "中文";

"中文"这个字符串的编码是根据操作系统的默认编码而定的,如果我们在中文的windows下开发,那这个"中文"字符串的编码是GBK。将"中文"字符串赋给str变量的时候,jvm会将"中文"有GBK转为Unicode编码,再把这个"中文"字符串赋给str变量。

 

byte[] utf8b = str.getBytes("UTF-8");

java String.getBytes(String charset)这个方法返回一个字串的字节数组,这里的字节是charset格式的。如果没有charset这个参数,则返回该操作系统默认的编码格式的字节数组。

这里的str是Unicode编码的,在这行代码中,jvm实际上是做了这样的转化 UNICODE => UTF-8,就是将Jvm内存中的unicode编码二进制码转化成UTF-8格式的二进制码然后赋值给byte[] utf8b 。这个转化的过程我们不用管,jvm会根据一个编码格式对照表来转化。

 

byte[] gbkb = str.getBytes("GBK");

同上。

 

 

System.out.println(new String(utf8b, "UTF-8"));

这里的二个参数"UTF-8"告诉jvm:“当前utf8b的编码格式是"UTF-8",你就以这个格式转化成unicode吧!”。也就是将utf8b转化成unicode再存入Jvm的内存,utf8=>unicode。(这个参数应该是为了告诉jvm使用“UTF-8”的编码格式对照表来转化)

 

 

System.out.println(new String(gbkb, "GBK"));

同上。

 

System.out.println(new String(gbkb, "UTF-8"));

这里gbkb保存的是gbk编码的字节,而这里的"UTF-8"告诉jvm 字节数组gbkb的编码格式是"UTF-8",jvm就会试图将原来是"GBK"格式的数据使用"UTF-8"的对照表来转化成unicode,结果当然是牛头不对马嘴了。

 

 

修改于:http://cai555.iteye.com/blog/661191

 

 

 

 

 

分享到:
评论

相关推荐

    JAVA编码习惯和几款JAVA性能分析工具

    以下是一些关键的Java编码习惯: 1. **Eclipse源代码格式化**:Eclipse作为流行的Java IDE,提供了自动格式化和组织输入的功能。通过设置`Window -> Preferences -> Java -> Editor -> Save Actions`,可以配置在...

    java编码总结1

    【标题】:“Java编码总结1”主要涉及到Java编程语言中的编码问题,这在软件开发中是至关重要的。编码问题往往会导致程序出现难以预料的错误,尤其是处理多国语言或者特殊字符时。Java作为广泛使用的跨平台语言,其...

    tlv的java编码和解码

    本文将详细讲解如何在Java环境中实现TLV的编码与解码,并结合提供的`ber-tlv`资源进行分析。 TLV结构简单明了,由三个部分组成: 1. **Tag**:标识数据的类型或者含义,通常是一个整数。 2. **Length**:表示Value...

    java判断编码方式

    在Java编程语言中,判断文件或字符串的编码方式是一个常见的需求。这主要涉及到字符集的概念,如ASCII、ISO-8859-1、UTF-8等,它们用于将二进制数据转换为人类可读的字符。在Java中,有多种方法可以用来识别或检测一...

    深入分析 Java 中的中文编码问题

    在Java编程中,中文编码问题是一个常见的挑战,尤其是在处理文本输入、输出以及网络通信时。本文将深入探讨Java中的中文编码问题,以及如何有效地解决这些问题。 首先,我们要了解字符编码的基本概念。字符编码是...

    哈夫曼编码算法与分析(java实现)

    哈夫曼编码算法与分析(java实现) 哈夫曼编码是一种广泛用于数据文件压缩的十分有效的编码方法,它通过对文件中各个字符出现的频率进行分析,生成各个字符的哈夫曼编码方案。哈夫曼编码的主要思想是通过构造一棵...

    Java安全编码标准

    不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳实践,而且从架构设计的角度分析了java api存在的设计缺陷和可能存在的安全风险,以及应对的策略和措施。可以将本书作为java安全方面的工具书,...

    java检测编码工具类

    Java编码检测工具类是Java开发中非常实用的一个组件,它能够帮助开发者准确地识别和处理各种文件的编码格式。在处理跨平台或者不同系统间的数据交换时,编码问题常常成为困扰,因为不同的操作系统和程序可能使用不同...

    深入分析Java中的中文编码问题

    ### 深入分析Java中的中文编码问题 #### 一、引言 在软件开发过程中,尤其是涉及到国际化和多语言支持的应用中,编码问题一直是令开发者头疼的问题之一。尤其是在使用Java这种跨平台语言进行开发时,不同的操作...

    java编码格式(对常见的java中文乱码作出分析及提出解决方案)

    Java编程中的中文乱码问题是一个常见但棘手的挑战,主要源于编码格式的不匹配和转换过程中的错误。本文深入探讨了这个问题,并提供了解决方案。 首先,我们要理解中文字符编码的历史背景。早期的计算机系统主要支持...

    java算法分析与设计之哈夫曼编码源代码

    java算法分析与设计之哈夫曼编码源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,尤其...

    java 文件编码转换

    标题"java 文件编码转换"指的是使用Java来解决文件编码问题,而描述中提到的"提供一个jar包和一个java文件"则暗示了我们可以通过这两个文件实现这个功能。 首先,`chardet.jar`可能是一个字符集检测库,用于自动...

    JAVA安全编码规范参考.pdf

    JAVA安全编码规范参考文档深入分析了在Java开发中如何编写安全的代码,降低系统被攻击的风险。文档内容涵盖了安全编码的基本原则以及常见漏洞的安全编码方法。 一、安全编码基本原则 1. 所有输入数据都是有害的 在...

    java db 省市区编码表

    这样的数据结构使得程序能够快速地根据区县编码查询到对应的省市区信息,同时也方便进行地域级别的统计和分析。 在开发Java桌面程序时,这个编码表可以被用作后台数据库的一部分,通过连接Java DB(如Derby)来实现...

    Java判断文件的编码

    ### Java判断文件编码的方法 在Java开发中,经常会遇到需要处理不同编码格式的文件的情况。为了确保程序能够正确解析文件内容,必须先判断文件的编码格式。本文将详细介绍如何使用Java来判断文件是否为UTF-8或GBK...

    Java安全编码标准_PDF电子书下载 带索引书签目录_完整版

    不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳实践,而且从架构设计的角度分析了java api存在的设计缺陷和可能存在的安全风险,以及应对的策略和措施。可以将本书作为java安全方面的工具书,...

    java编码规范文档JAVA编写服务器和客户端

    本篇文章将围绕一份具体的Java编码规范文档来探讨如何使用Java开发服务器和客户端程序,并在此基础上深入分析相关的技术细节。 #### 二、Java编码规范要点 1. **命名规范**:变量名、方法名等应采用有意义的名称,...

    Java编码规范 Java编码规范

    根据提供的标题、描述、标签及部分内容,我们可以详细探讨关于Java编码规范的重要性和具体实施方法。 ### 为什么需要Java编码规范? 编码规范对于提高代码的可读性和可维护性至关重要。良好的编码规范能够确保团队...

Global site tag (gtag.js) - Google Analytics