`
ljq0310
  • 浏览: 1967 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
文章分类
社区版块
存档分类
最新评论

JAVA 变长UTF-8 编码 转为 UNICODE

    博客分类:
  • JAVA
阅读更多
 /**
     * 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;
	}
分享到:
评论

相关推荐

    URL编码,Gb2312页面提交到Utf-8页面

    2. **Unicode到UTF-8的转换**:接下来将Unicode编码的字符串转换为UTF-8编码,以便在网络上传输。 3. **URL编码**:最后对UTF-8编码后的字符串进行URL编码,确保其可以在URL中安全传输。 #### 五、具体实现 下面...

    gbk汉字转utf8编码的转换函数,亲测有用

    这段代码首先使用`encode`方法将GBK编码的字符串转为字节流,然后再用`decode`方法将字节流解码为UTF-8编码的字符串。这种方法简单有效,但需要注意的是,如果GBK字符串中包含无法映射到Unicode的字符,会抛出`...

    Unicode转码程序

    UTF-8编码可变长,从1到4个字节不等,英文字符使用1字节,大部分常用中文字符使用3字节,非常用字符使用4字节。UTF-8的一个优点是对ASCII字符兼容,因此在处理英文文本时效率较高。 2. UTF-16:它将每个字符编码为2...

    Java 编程技术中汉字问题的分析及解决.docx

    在Java编程中,处理汉字问题时,需要确保正确设置字符编码,比如在读写文件或在网络传输中使用UTF-8编码,以避免乱码问题。此外,了解不同编码之间的转换方法,如从GB2312转为Unicode,是解决汉字问题的关键。对于...

    新编码转换大全模块+应用例程.rar

    - **BOM(Byte Order Mark)**:UTF-8编码的文件可能会带有BOM,某些程序可能会因此出现问题。 - **处理策略**:确保文件编码信息的准确传递,或使用能自动识别编码的工具。 5. **应用例程**: 提供的应用例程...

    字符集编码的识别(zz)

    而UTF-8是Unicode的一个实现,它使用变长字节编码,广泛应用于网络和软件开发中。 3. **编码问题与冲突**:在处理不同来源的数据时,可能会遇到编码不一致导致的乱码问题。文章可能探讨了如何识别文件的编码格式,...

    深入剖析JSP和Servlet对中文的处理

    charset=UTF-8")`来设置响应头,告知客户端使用UTF-8编码。 - **读取请求参数**:当从客户端接收到中文参数时,需要正确地设置请求编码,如`request.setCharacterEncoding("UTF-8")`。 **3. “?”号出现的原因** ...

    Java中文问题详解(高手必读)

    // 将Unicode字符转为UTF-8编码的字节 char[] c = {'\u4f60'}; convertor = ByteToCharConverter.getConverter("utf-8"); byte[] b = convertor.convertAll(c); // 输出结果 for (int i = 0; i ; i++) { System....

    java 中文字转为英文 (2).zip

    例如,`InputStreamReader(is, "UTF-8")`创建一个读取器,将字节流`is`转换为字符流,并使用UTF-8编码。 7. **FileReader和FileWriter**:这两个类默认使用平台的默认字符集,可能不适用于处理多语言数据。在处理...

    计算机软件-编程源码- 取得汉字的第一个字母.zip

    例如,UTF-8是一种变长编码,一个汉字可能由1到4个字节组成,而GBK是基于GB2312的扩展,通常每个汉字占2个字节。 提取汉字首字母的关键在于理解汉字与拼音之间的转换。在中文处理中,通常需要将汉字转化为拼音,...

    JAVA中汉字字符转化为英文字符

    - **UTF-8**: 一种常用的Unicode编码方式,可变长度,兼容ASCII,并且能表示Unicode中的所有字符。 ##### 2. 方法 `toTureAsciiStr` 该方法的目标是将汉字转化为对应的英文字符。其工作原理如下: - **参数**: - ...

    Unicode与中文互换相关

    Unicode标准中最常见的编码形式之一是UTF-8,它使用可变长度字节序列来表示字符,这使得它在互联网上的传输非常高效。 #### 三、中文与Unicode的转换 ##### 1. 将Unicode转为中文 在Java中,可以编写一个方法将...

    字符串管理

    - **编码转换**:如从UTF-8转为GBK,需使用`encode()`和`decode()`方法。 8. **字符串工具**: - **正则表达式**:用于匹配和处理复杂模式的字符串,如`re`模块在Python中。 - **字符串处理库**:许多编程语言都...

Global site tag (gtag.js) - Google Analytics