/**
* UTF编码转为 UNICODE
* @param b
* @return
*/
private byte[] UTF8_TO_UNICODE(byte[] b){
byte[] BUF=new byte[b.length];
int j=0;
for (int i = 0; i < b.length; i++) {
byte tempBuf=b[i];
//int code=(b[i] & 0xFF) | ((b[i + 1] & 0xFF) );( 没有用 ,之前是用来做if else 判断的,现在直接用编码 第一个字节做判断)
if(tempBuf==34) // 引号直接跳过
continue;
int size=i+1;
if(size<b.length && tempBuf==0 && b[size]==32){ //由于84, 21, 92, 92, 17, 92, 92, 113, 此类由于解析协议不晓得,将可能出现乱码,所以以空格为间隔符,让缓存BYTE转为偶数位,以便后面的身份证不会乱码
//Log.e("空格","i="+i+" tempBuf="+tempBuf+" j="+j);
if(j%2!=0){
j++;
}
}
if(tempBuf<=127 && tempBuf>=0){ //第一类 单字节
BUF[j++]=tempBuf;
continue;
}else if(tempBuf<=-33 ){ //第二类(2个字节)
byte[] buf=new byte[2];
buf[0]=(byte) ((b[i] ^ MASK2BYTES));
buf[0]=(byte) (buf[0]<<6);
buf[1]=(byte) (b[i+1] ^ MASKBYTE);
byte result=(byte) (buf[0] ^ buf[1]);
//zhuan(new byte[result]);
Log.e("---",String.format("%02x", result));
BUF[j++]=result;
i++;
}
else if(tempBuf <= -17){ //第三类情况(3个字节),此类算法最终需要得到的是两个字节的编码,每个字节为一个十六进制的unicode编码,所以要涉及到把一个short拆分成连个byte
short[] buf=new short[3];
buf[0] = (byte)(b[i] ^ MASK3BYTES);
buf[0]=(short) (buf[0]<<12);
buf[1] = (byte) (b[i+1] ^ MASKBYTE );
buf[1]=(short) (buf[1]<<6);
buf[2] = (byte) (b[i+2] ^ MASKBYTE);
//... 没解析完。。。。没有TF卡,不知道怎么解析恶劣
short buf1 = (short) (buf[0]^buf[1]);
BUF[j++]=(byte)(buf1>>8);
short buf2= (short)(buf[0]^buf[2]);
BUF[j++]=(byte)buf2;
i=i+2; //由于 循环 最后还会执行一个 i++,所以这里i只能+2
}
//理论上 UTF-8组成的编码可以最长到6个字节,实际上 中文一般会只用到3个字节的UTF-8,4-6个字节的解码算法待续
}
//需要对已经转换的BYTE[]进行重组,BUF[]的后面一些是空的,会解析成乱码,而转换出来的编码长度,应该是j
byte[] resultBuf=new byte[j];
for (int i = 0; i < resultBuf.length; i++) {
resultBuf[i]=BUF[i];
}
return resultBuf;
}
分享到:
相关推荐
2. **Unicode到UTF-8的转换**:接下来将Unicode编码的字符串转换为UTF-8编码,以便在网络上传输。 3. **URL编码**:最后对UTF-8编码后的字符串进行URL编码,确保其可以在URL中安全传输。 #### 五、具体实现 下面...
这段代码首先使用`encode`方法将GBK编码的字符串转为字节流,然后再用`decode`方法将字节流解码为UTF-8编码的字符串。这种方法简单有效,但需要注意的是,如果GBK字符串中包含无法映射到Unicode的字符,会抛出`...
UTF-8编码可变长,从1到4个字节不等,英文字符使用1字节,大部分常用中文字符使用3字节,非常用字符使用4字节。UTF-8的一个优点是对ASCII字符兼容,因此在处理英文文本时效率较高。 2. UTF-16:它将每个字符编码为2...
在Java编程中,处理汉字问题时,需要确保正确设置字符编码,比如在读写文件或在网络传输中使用UTF-8编码,以避免乱码问题。此外,了解不同编码之间的转换方法,如从GB2312转为Unicode,是解决汉字问题的关键。对于...
- **BOM(Byte Order Mark)**:UTF-8编码的文件可能会带有BOM,某些程序可能会因此出现问题。 - **处理策略**:确保文件编码信息的准确传递,或使用能自动识别编码的工具。 5. **应用例程**: 提供的应用例程...
而UTF-8是Unicode的一个实现,它使用变长字节编码,广泛应用于网络和软件开发中。 3. **编码问题与冲突**:在处理不同来源的数据时,可能会遇到编码不一致导致的乱码问题。文章可能探讨了如何识别文件的编码格式,...
charset=UTF-8")`来设置响应头,告知客户端使用UTF-8编码。 - **读取请求参数**:当从客户端接收到中文参数时,需要正确地设置请求编码,如`request.setCharacterEncoding("UTF-8")`。 **3. “?”号出现的原因** ...
// 将Unicode字符转为UTF-8编码的字节 char[] c = {'\u4f60'}; convertor = ByteToCharConverter.getConverter("utf-8"); byte[] b = convertor.convertAll(c); // 输出结果 for (int i = 0; i ; i++) { System....
例如,`InputStreamReader(is, "UTF-8")`创建一个读取器,将字节流`is`转换为字符流,并使用UTF-8编码。 7. **FileReader和FileWriter**:这两个类默认使用平台的默认字符集,可能不适用于处理多语言数据。在处理...
例如,UTF-8是一种变长编码,一个汉字可能由1到4个字节组成,而GBK是基于GB2312的扩展,通常每个汉字占2个字节。 提取汉字首字母的关键在于理解汉字与拼音之间的转换。在中文处理中,通常需要将汉字转化为拼音,...
- **UTF-8**: 一种常用的Unicode编码方式,可变长度,兼容ASCII,并且能表示Unicode中的所有字符。 ##### 2. 方法 `toTureAsciiStr` 该方法的目标是将汉字转化为对应的英文字符。其工作原理如下: - **参数**: - ...
Unicode标准中最常见的编码形式之一是UTF-8,它使用可变长度字节序列来表示字符,这使得它在互联网上的传输非常高效。 #### 三、中文与Unicode的转换 ##### 1. 将Unicode转为中文 在Java中,可以编写一个方法将...
- **编码转换**:如从UTF-8转为GBK,需使用`encode()`和`decode()`方法。 8. **字符串工具**: - **正则表达式**:用于匹配和处理复杂模式的字符串,如`re`模块在Python中。 - **字符串处理库**:许多编程语言都...