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

1. 通过socket给Java传递byte[]数组时,utf-8的字节数组在转换为String, Java并不会遇到0就停止结束,而是一直使用完byte[]的容量,

所以在转换为Java的String需要自己判断字节值是0的位置,再截取数组长度。

[cpp] view plaincopyprint?

  1. public  static int searchByte(byte[] data, byte value) {
  2. int size = data.length;
  3. for (int i = 0; i < size; ++i) {
  4. if (data[i] == value) {
  5. return i;
  6. }
  7. }
  8. return -1;
  9. }
  10. public static void main(String[] args) {
  11. byte[] info = new byte[10];
  12. info[0] = 0x31;
  13. info[1] = 0x31;
  14. info[2] = 0;
  15. info[3] = 0x1;
  16. info[4] = 0x32;
  17. info[5] = 0;
  18. try {
  19. String utf8 = new String(info, "UTF-8");
  20. // 1.这里时数组的大小,而不是2,String即使遇到0也会继续加载到String里.
  21. // 输出: 10
  22. System.out.println("" + utf8.length());
  23. // 1.输出很奇怪,不会输出不可见字符的占位符
  24. // 输出: 112
  25. System.out.println(utf8);
  26. if (utf8.equalsIgnoreCase("112")) {
  27. // 和112不等,这里不会输出.
  28. System.out.println("It is same with 112");
  29. }
  30. byte[] info1 = utf8.getBytes("UTF-8");
  31. // 1. 还原为byte[],发现数据并没有丢失.
  32. // 输出: 10:0:1:50
  33. System.out.println("info1: " + info1.length + ":" + info1[2] + ":"
  34. + info1[3] + ":" + info1[4]);
  35. // 1. 所以如果需要到0结束的utf8字节数组,需要自己判断0并截取.
  36. int offset = -1;
  37. // binarySearch 必须要数组升序排序了才可以用,所以不能用.
  38. // offset = Arrays.binarySearch(info, (byte)0);
  39. offset = searchByte(info,(byte)0);
  40. String info2 = new String(info, 0, offset, "UTF-8");
  41. // 输出: 11
  42. System.out.println("info2: " + info2);
  43. // 输出: 2
  44. System.out.println("" + info2.length());
  45. } catch (UnsupportedEncodingException e) {
  46. // TODO Auto-generated catch block
  47. e.printStackTrace();
  48. }
  49. }
时间: 2024-08-25 21:11:49

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

[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

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数组转换为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数组与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

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

PTA L1-042 日期格式化(将字符数组转换为string类型)

原题 主要通过这题介绍 C++ 中如何将字符数组与字符串的相互转换 参考博客 字符数组转字符串: char a[1000]; string s(&a[i],&a[j]);//i为要转化的其实位置,j为末尾位置加一 字符串转字符数组 #include<bits/stdc++.h> using namespace std; char a[15]; int main() { string s; cin>>s; strncpy(a,s.c_str(),s.length()+

int数组转换为string字符串

将数值数组拼合为字符串,一直使用循环的方式,代码虽简单,但总想更简洁,重构嘛 int[] intArray = new int[] { 1, 2, 3, 4, 5 }; string result = string.Empty; for (int i = 0; i < intArray.Length; i++) { if (!string.IsNullOrEmpty(result)) result += "," + intArray[i]; else result = intAr

java里面byte数组和String字符串怎么转换

//string 转 byte[] String str = "Hello"; byte[] srtbyte = str.getBytes(); // byte[] 转 string String res = new String(srtbyte); System.out.println(res); //当然还有可以设定编码方式 的 String str = "hello"; byte[] srtbyte = null; try { srtbyte = str.ge