[Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]

场景:

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里.
			// 输出: 10
			System.out.println("" + utf8.length());
			// 1.输出很奇怪,不会输出不可见字符的占位符
			// 输出: 112
			System.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:50
			System.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");
			// 输出: 11
			System.out.println("info2: " + info2);
			// 输出: 2
			System.out.println("" + info2.length());
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
时间: 2024-08-24 03:49:23

[Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]的相关文章

[utf8编码的byte[]数组转换为String时要注意的问题]

1. 通过socket给Java传递byte[]数组时,utf-8的字节数组在转换为String, Java并不会遇到0就停止结束,而是一直使用完byte[]的容量, 所以在转换为Java的String需要自己判断字节值是0的位置,再截取数组长度. [cpp] view plaincopyprint? public  static int searchByte(byte[] data, byte value) { int size = data.length; for (int i = 0; i

java byte数组与String互转

java byte数组与String互转 CreationTime--2018年7月6日14点53分 Author:Marydon 1.String-->byte[] 方法:使用String.getBytes(charset)实现 String website = "http://www.cnblogs.com/Marydon20170307"; // String-->byte[],并指定字符集 byte[] b = website.getBytes("utf-

JAVA关于byte数组与String转换的问题

1 public class ToString{ 2 public static void main(String[] args){ 3 String aa = "hellow"; 4 byte[] bb = aa.getBytes(); 5 byte[] cc = aa.getBytes(); 6 7 System.out.println(aa); 8 System.out.println(bb.toString()); 9 System.out.println(cc.toStrin

java中基本数据类型数据转化成byte[]数组存储

java中基本数据类型数据转化成byte[]数组存储 1 package com.wocqz.test; 2 3 public class testByte { 4 5 /** 6 * int 转成byte数组 7 * */ 8 public static byte[] int_byte(int id){ 9 //int是32位 4个字节 创建length为4的byte数组 10 byte[] arr=new byte[4]; 11 12 arr[0]=(byte)((id>>0*8)&

UTF-8编码下&#39;\u7528\u6237&#39;转换为中文汉字&#39;用户&#39;

UTF-8编码下'\u7528\u6237'转换为中文'用户' 一.前言 有过多次,在开发项目中遇见设置文件编码格式为UTF-8,但是打开该文件出现类似\u7528这样的数据,看也看不懂,也不是平常见到的乱码.这里的\u7528类似的数据,其中'\u'表示UNICODE编码,其实数据就是对应的UTF-8下的汉字. 二.问题处理 下面文件的编码已被设置为UTF-8,但打开这里的原文件部分内容如下: #use 1,2 #admin_login 100001=\u7528\u6237\u540D\u6

把Java数组转换为List时的注意事项

本文由 ImportNew - 飘扬叶 翻译自 mlangc.欢迎加入翻译小组.转载请见文末要求. 不幸的是并不是每件事都尽如人意.举个例子,现在将一个Java数组转换为List.当然,我们可以使用Arrays.asList方法,但是如果没有慎重思考就随便使用几乎肯定会产生令人讨厌的意外.考虑完下面这段程序并预测其输出你就明白我的意思了: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package com.wordpress.mla

Delphi Byte数组与String类型的转换

string string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节: 变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起始于@Str[1],@Str[1]偏移负16个字节的空间存储着字串长度.引用计数等信息.字符序列以NULL结束. string[n] string[n] = ShortString = 短字符串,最多容纳255个字符,实际长度是字符长度+1,是Delphi的简单类型: Str[0]存储着字符的个数,

[Java]_[初级]_[实用的byte处理类]

场景: 1.  C++可以使用std::string来缓存uint8_t的字节数组,比如在接收socket数据包时, 需要接收完整才可以处理某些数据,这时候就需要先缓存起来再处理. 2.  问题来了,Java的String是存储的UNICODE双字节结构,而且只支持字符,不支持如\0这些字符,并不适合处理字节数据. 先看看Java提供字节处理有哪些类,但是都不具备临时缓存的功能. 1. java.lang.Byte 类: 处理String和byte类型之间的转换,包括支持基数.可惜最大只支持by

python基础-PyCharm设置作者信息模板_修改解释器_设置软件UTF-8编码

一.PyCharm 设置作者信息模板 1.File---Settings---在搜索框中搜索:File and Code Templates---Python scripts 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: huzhihua 二.修改解释器方法 File---settings---project:python---project interpreter 三.设置软件UTF-8 编码File---Setting