写点什么

Java 字符串转码

  • 2022 年 4 月 20 日
  • 本文字数:1412 字

    阅读完需:约 5 分钟

}


System.out.println("|binary|"+length+" bit "+str);


}


public static void getBinary(byte[] barray) {


int i;


String bstr;


for(i = 0; i <barray.length; i++){


bstr = Integer.toBinaryString((barray[i] & 0xFF) + 0x100).substring(1);


System.out.print(bstr+" ");


}


System.out.println("|bit array|length:"+barray.length+" bit");


}


public static byte[] gbkToUtf8(String str) {


/str 是传入的要转码的字符串/


/原本字符串的长度/


int endLength,i;


/工作字符串,用于延长原字符串后转码,最后一位汉字可能被破坏/


String workstr = "";


/工作比特数组,保存工作字符串转码后的比特信息,最后一个字节可能被破坏/


byte[] workarray;


/测试换行符比特数组,用于测试 windows 的\r\n 二字节换行符并予以替换/


byte[] enterTestArray;


/*


延长字符串,延长度为一位汉字长,确保在转码的时候不会破坏原本的最后一位


如果汉字是奇数则 GBK 转为 UTF-8 码的最后一个汉字(三个字节)的最后一个字节会被置为 00111111(十进制 63),表示为问号


*/


String addedstr = str + "喵";


byte byteMiaoHigh = -95;


byte byteMiaoLow = -119;


System.out.println(addedstr);


/*


测试有无 window 换行符,如果有则进行替换,将\r 替换为喵的高八位,\n 替换为喵的低八位


*/


enterTestArray = str.getBytes();


if(enterTestArray[enterTestArray.length - 2] == 13 && enterTestArray[enterTestArray.length - 1] == 10) {


Java 开源项目【ali1024.coding.net/public/P7/Java/git】 enterTestArray[enterTestArray.length - 2] = byteMiaoHigh;


enterTestArray[enterTestArray.length - 1] = byteMiaoLow;


addedstr = new String(enterTestArray);//


}


//使用 UTF-8 -> GBK 进行暴力不科学的转码(如果汉字是奇数则最后一位的信息会被破坏)


try {


workstr = new String(addedstr.getBytes("UTF-8"),"GBK");


} catch (UnsupportedEncodingE 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 xception e1) {


e1.printStackTrace();


}


//工作数组获取工作字符串的比特信息以及长度


workarray = workstr.getBytes();


endLength = workarray.length;


//utf8 数组的长度要抛去工作数组的最后三位


byte[] uft8array = new byte[endLength - 3];


for(i = 0; i < endLength - 3; i++) {


uft8array[i] = workarray[i];


}


getBinary(workarray);


//展示 uft8array 的内容(二进制)


for(i = 0; i <uft8array.length; i++){


String bstr = Integer.toBinaryString((uft8array[i] & 0xFF) + 0x100).substring(1);


System.out.print(bstr+" ");


}


System.out.println("|over|sbsy");


//返回 utf8 比特数组


return uft8array;


}


/*


示例:


“中文”两个字的编码:


中(GBK): 11010110 11010000


中(UTF-8): 11100100 10111000 10101101


文(GBK): 11001110 11000100


文(UTF-8): 11100110 10010110 10000111


喵(GBK): 11011111 11110111


喵(UTF-8): 11100101 10010110 10110101


windows 换行符: \r\n 00001101 00001010 HEX:0D0A


*/


}


[](()三、测试


=======================================================================

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。


以上就是蚂蚁技术四面和 HR 面试题目,以下最新总结的最全,范围包含最全 MySQL、Spring、Redis、JVM 等最全面试题和答案,仅用于参考



用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Java字符串转码_Java_爱好编程进阶_InfoQ写作社区