Java中的编码格式
2016-07-12 18:00
316 查看
Java中的编码
gbk编码 中文占用2个字节,英文占1个字节;utf-8编码 中文占用3个字节。,英文占用1个字节;
Java是双字节编码 (utf-16be) utf -16be 中文占2个字节,英文占2个字节
具体代码块
package com.zhb.java; public class EncodeDemo { public static void main (String[] args) throws Exception { String s ="你好abc"; //gbk编码 中文占用2个字节,英文占1个字节 System.out.println("-----gbk编码-----"); byte[] bytes1 =s.getBytes("gbk"); for (byte b : bytes1) { //把字节(转换成 int)以16进制方式显示 // & 0xff 把前24个0 去掉,只留后8位具体解释看后面 System.out.print(Integer.toHexString(b & 0xff)+" "); } System.out.println("\n-----utf8编码-----"); //utf-8编码 中文占用3个字节。,英文占用1个字节 byte [] bytes2 = s.getBytes("utf-8"); for (byte b : bytes2) { System.out.print(Integer.toHexString(b & 0xff)+" "); } System.out.println("\n-----utf16be编码-----"); //Java是双字节编码 utf-16be // utf -16be 中文占2个字节,英文占2个字节 byte [] bytes3 = s.getBytes("utf-16be"); for (byte b : bytes3) { System.out.print(Integer.toHexString(b & 0xff)+" "); } System.out.println(); /** * 当你的字节序列是某种编码时,这个时候想把字节序列变成 * 字符串,也需要这种编码方式,否则出现乱码 */ String str1 = new String (bytes3); //出现乱码,与你设置的编码格式有关 System.out.println(str1); String str2 = new String (bytes3,"utf-16be"); System.out.println(str2); } }
代码块执行结果
—–gbk编码—–c4 e3 ba c3 61 62 63
—–utf8编码—–
e4 bd a0 e5 a5 bd 61 62 63
—–utf16be编码—–
4f 60 59 7d 0 61 0 62 0 63
O`Y} a b c
你好 a b c
&0xff 的意义
我对 0xff 还是不是特别了解,为什么加上它就是可以去掉前24位呢?我于是就把上面的代码 处理了下
&0xff | 未&0xff |
---|---|
e4 | ffffffe4 |
十六进制 | 二进制 |
---|---|
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
A | 1010 |
B | 1011 |
C | 1100 |
D | 1101 |
E | 1110 |
F | 1111 |
如果&0xff 就可以去掉 前面的24个1 同时保留后8位
我们知道&运算
1 & 1 = 1, 0 & 1 = 0
那么0xff 就是0000 0000 0000 0000 0000 0000 1111 1111
前24位不管是什么值只要&上都是0 ,后面8位是什么值显示什么值
相关文章推荐
- spring定时任务时间规则——在线验证时间跑批规则
- 如何在依赖aar的情况下进行Java单元测试
- shiro与spring整合
- Intellij上Junit配置
- Spring MVC 参数字段校验
- Spring AOP的底层实现技术 Proxy InvocationHandler
- java 泛型编程学习
- Java并发包:ExecutorService和ThreadPoolExecutor
- SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系
- XFire客户端调用JDK1.6的webserivce时参数为null
- java多线程--JUC集合框架
- weblogic报java.lang.ClassCastException:com.octetstring.vde.backend.BackendRoot之解决
- Android 热补丁动态修复总结 eclipse版
- JEE框架Spring详细简介
- SpringMVC+myBatis+druid 多数据库
- JAVA正则表达式 Pattern和Matcher(转)
- sdk、jdk、jre的区别
- 使用CXF发布和调用webService(不使用Spring)
- Spring+Mybatis 切换多数据源
- 【SpringMVC整合MyBatis】整合思路与工程结构