java编码

String str = "中"; // ------------java编码 // Java里使用的是UTF-16BE方式来存储数据的 System.out.println(Integer.toHexString( str.charAt(0) & 0x00FFFF | 0xFF0000).substring(2, 6) .toUpperCase());// 4E2D /* * 进行编码时,因为 UTF-16 编码方式本身未指定字节顺序标记,所以默认使用 Big Endian 字节 顺序编码,并将 Big * Endian 字节顺序标记写入到流中,所以流前面多了 FE FF 二字节的高字节 顺序标记 */ System.out.println(byteToHex(str.getBytes("utf-16")));// FE FF 4E 2D /* * 进行编码时,UTF-16BE 和 UTF-16LE charset 不会将字节顺序标记写入到流中 * 即它们所编出的码每个字符只占二个字节,要注意的是解码时要使用同样的编码 方式,不然会出现问题乱码 */ System.out.println(byteToHex(str.getBytes("utf-16BE")));// 4E 2D System.out.println(byteToHex(str.getBytes("utf-16LE")));// 2D 4E // 使用 utf-16BE 对高字节序进行解码,忽略字节顺序标记,即不会将流前二字节内容看作字节序标记 System.out.println(new String(new byte[] { 0x4E, 0x2D }, "utf-16BE"));// 中 // 使用 utf-16LE 对低字节序进行解码,忽略字节顺序标记,即不会将流前二字节内容看作字节序标记 System.out.println(new String(new byte[] { 0x2D, 0x4E }, "utf-16LE"));// 中 // ------------解码 /* * 使用 utf-16 进行解码时,会根据流前两字节内部来确定是低还是高字节顺序,如果流的前两字节 内部不是 高字节序 FE * FF,也不是低字节序 FF FE时,则默认使用 高字节序 方式来解码 */ // 因为0x4E,0x2D为“中”字的高字节表示,所以前面需要加上 FE FF 字节顺序标记来指示它 System.out.println(new String(new byte[] { (byte) 0xFE, (byte) 0xFF, 0x4E, 0x2D }, "utf-16"));// 中 // 因为0x2D,0x4E为“中”字的低字节表示,所以前面需要加上 FF FE 字节顺序标记来指示它 System.out.println(new String(new byte[] { (byte) 0xFF, (byte) 0xFE, 0x2D, 0x4E, }, "utf-16"));// 中 // 使用默认 高字节顺序 方式来解码, System.out.println(new String(new byte[] { 0x4E, 0x2D }, "utf-16BE")+"ss");// 中 // 因为 0x2D,0x4E 为“中”的低字节序,但 utf-16 默认却是以 高字节序来解的,所以出现乱码 System.out.println(new String(new byte[] { 0x2D, 0x4E, }, "utf-16LE"));// ? } public static String byteToHex(byte[] bt) { StringBuilder sb = new StringBuilder(4); for (int b : bt) { sb.append(Integer.toHexString(b & 0x00FF | 0xFF00).substring(2, 4) .toUpperCase()); sb.append(" "); } return sb.toString(); } public static void t1() {// ASCII转换为字符串 String s = "22307 35806 24555 20048";// ASCII码 String[] chars = s.split(" "); System.out.println("ASCII 汉字 /n----------------------"); for (int i = 0; i < chars.length; i++) { System.out.println(chars[i] + " " + (char) Integer.parseInt(chars[i])); } } public static void t2() {// 字符串转换为ASCII码 String s = "新年快乐!";// 字符串 char[] chars = s.toCharArray(); // 把字符中转换为字符数组 System.out.println("/n/n汉字 ASCII/n----------------------"); for (int i = 0; i < chars.length; i++) {// 输出结果 System.out.println(" " + chars[i] + " " + (int) chars[i]); } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值