[Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]
来源:互联网 发布:数据库审计系统报价 编辑:程序博客网 时间:2024/06/06 07:50
场景:
1. 通过socket给Java传递byte[]数组时,utf-8的字节数组在转换为String, Java并不会遇到0就停止结束,而是一直使用完byte[]的容量,
所以在转换为Java的String需要自己判断字节值是0的位置,再截取数组长度。
public static int searchByte(byte[] data, byte value) {int size = data.length;for (int i = 0; i < size; ++i) {if (data[i] == value) {return i;}}return -1;}public static void main(String[] args) {byte[] info = new byte[10];info[0] = 0x31;info[1] = 0x31;info[2] = 0;info[3] = 0x1;info[4] = 0x32;info[5] = 0;try {String utf8 = new String(info, "UTF-8");// 1.这里时数组的大小,而不是2,String即使遇到0也会继续加载到String里.// 输出: 10System.out.println("" + utf8.length());// 1.输出很奇怪,不会输出不可见字符的占位符// 输出: 112System.out.println(utf8);if (utf8.equalsIgnoreCase("112")) {// 和112不等,这里不会输出.System.out.println("It is same with 112");}byte[] info1 = utf8.getBytes("UTF-8");// 1. 还原为byte[],发现数据并没有丢失.// 输出: 10:0:1:50System.out.println("info1: " + info1.length + ":" + info1[2] + ":"+ info1[3] + ":" + info1[4]);// 1. 所以如果需要到0结束的utf8字节数组,需要自己判断0并截取.int offset = -1;// binarySearch 必须要数组升序排序了才可以用,所以不能用.// offset = Arrays.binarySearch(info, (byte)0);offset = searchByte(info,(byte)0);String info2 = new String(info, 0, offset, "UTF-8");// 输出: 11System.out.println("info2: " + info2);// 输出: 2System.out.println("" + info2.length());} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
1 3
- [Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]
- [Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]
- [Java]_[初级]_[实用的byte处理类]
- Java byte[]字节数组转换为String字符串的注意事项
- [Java]_[初级]_[String的split里的坑]
- [Cocoa]_[初级]_[NSTableView--数据操作和表格操作要注意的问题]
- java中utf-8编码的byte数组转换成String类型代码
- java中utf-8编码的byte数组转换成String类型代码
- [Cocoa]_[初级]_[NSString 、NSImage、NSData、std::string之间的转换]
- [C/C++标准库]_[初级]_[使用ctype里的isxxx函数时要注意的事项]
- [Java]_[初级]_[比较String和StringBuffer的区别和使用场景]
- VB 字节数组和字符串的转换问题 (String<>Byte)
- JAVA里面关于byte数组和String之间的转换问题
- JAVA里面关于byte数组和String之间的转换问题
- JAVA里面关于byte数组和String之间的转换问题
- JAVA里面关于byte数组和String之间的转换问题
- JAVA里面关于byte数组和String之间的转换问题
- 深入 JAVA里面关于byte数组和String之间的转换问题
- 黑马程序员——JavaSE基础_5
- 排序算法
- socket的一些事
- .NET学习之面向对象总结
- 艾格拉斯张鹏:重度手游防外挂及安全
- [Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]
- IsIconic()和OnPaint()函数 虽然没什么用 留个印象
- Time 类可以实现调整和重新设置,显示时间,将两个时间相加的功能
- Hash表
- Android开源项目分类汇总
- 2、Websphere学习笔记之二安装Installation Manager篇
- Android APK安装包瘦身
- 创建windows计划任务
- hdu 2717 Catch That Cow