代码如下:
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 api存在的设计缺陷和可能存在的安全风险,以及应对的策略和措施。可以将本书作为java安全方面的工具书,...
编码问题一直困扰着开发人员,尤其在Java中更加明显,因为Java是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍Java中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别...
java编码格式问题,对常见的java中文乱码作出分析及提出解决方案
java算法分析与设计之哈夫曼编码源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,尤其...
在网上看到的两篇文章,收集后分享给大家。
1.哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。给出文件中各个字符出现的频率,求各个字符的哈夫曼编码方案。
本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别;Java 中经常需要编码的场景;出现中文问题的原因分析;在开发 Java web 程序时可能会存在编码的几个地方,一...
主要介绍了java使用Hex编码解码实现Aes加密解密功能,结合完整实例形式分析了Aes加密解密功能的定义与使用方法,需要的朋友可以参考下
深入分析 Java 中的中文编码问题(1) - Java综合 - Java - ITeye论坛.mht
NULL 博文链接:https://thinktothings.iteye.com/blog/1138741
java编写的huffman编码,参考算法设计与分析
不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳实践,而且从架构设计的角度分析了java api存在的设计缺陷和可能存在的安全风险,以及应对的策略和措施。可以将本书作为java安全方面的工具书,...
如果在编程中遇到不能正确显示中文时 要先弄清楚以上几项所使用的字体编码 再分析找出原因 即可解决问题 ">ava支持UTF 8 ISO 8859 1 GBK等各种字体编码 可笔者发现Java中字体编码的问题仍难倒了不少程序员 网上虽然...
在本文中,我们介绍了Base64.encodeBase64String方法的用途和功能,它是Java语言中用于Base64编码的一个重要工具。我们提供了一个完整的Java示例代码,演示了如何使用该方法对二进制数据进行Base64编码。通过本文的...
通过java实现编译原理中的词法分析功能主要包括: 1).识别简单语言的单词符号 2.识别简单语言的基本字、标识符、无符号整数、运算符和界符 例如: 输入: x:=9; if x>0 then x:=2*x+1/3 fi #(可以文件方式读入) ...
Java常见错误分析Java常见错误分析Java常见错误分析
阿里巴巴编码规范 基础技能认证 考题分析(考题 +答案) ,阿里Java开发手册