编码测试.

package codingTest;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class CodingTest {
public static void test1() throws UnsupportedEncodingException {
// GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,
// 高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。
// System.out.println("---------------------------------");
// int ch3 = 0x55;
// ch3 = ch3 << 8;
// ch3 = ch3 | 0x4a;
// System.out.println("str:" + (char) ch3);
// System.out.println("" + dec2Hex((int) ch3));
// System.out.println("---------------------------------");
// int ch = 0xA4;
// ch = ch << 8;
// ch = ch | 0x61;
// System.out.println("str:" + (char) ch);
// System.out.println("---------------------------------");
// char str = '啊';
// System.out.println("啊" + dec2Hex((int) str));
// System.out.println("---------------------------------");
// str = '嗀';
// System.out.println("嗀" + dec2Hex((int) str));

System.out.println("从字节数组---------转字符");
byte[] bin = new byte[] { (byte) 0xB0, (byte) 0xA1 };
System.out.println(new String(bin, "gb2312"));

System.out.println("啊 unicode---------------------------------");
String str = "啊";
byte[] bin2 = str.getBytes("unicode");
for (int i = 0; i < bin2.length; i++) {
System.out.println(dec2Hex((int) bin2[i]));
}
System.out.println(new String(bin2, "unicode"));

System.out.println("啊 utf-8---------------------------------");
bin2 = str.getBytes("utf-8");
for (int i = 0; i < bin2.length; i++) {
System.out.println(dec2Hex((int) bin2[i]));
}
System.out.println(new String(bin2, "utf-8"));

System.out.println("啊 gb2312---------------------------------");
bin2 = str.getBytes("gb2312");
for (int i = 0; i < bin2.length; i++) {
System.out.println(dec2Hex((int) bin2[i]));
}
System.out.println(new String(bin2, "gb2312"));

System.out.println("啊 big5---------------------------------");
bin2 = str.getBytes("big5");
for (int i = 0; i < bin2.length; i++) {
System.out.println(dec2Hex((int) bin2[i]));
}
System.out.println(new String(bin2, "big5"));

System.out.println("啊 iso-8859-1---------------------------------");
bin2 = str.getBytes("iso-8859-1");
for (int i = 0; i < bin2.length; i++) {
System.out.println(dec2Hex((int) bin2[i]));
}
System.out.println(new String(bin2, "iso-8859-1"));
}

public static void test2() throws IOException {
File file = new File("D:\\indexTest\\888.txt");

BufferedInputStream bufferInSt = new BufferedInputStream(new FileInputStream(file));

byte[] buff = new byte[20];
int size = bufferInSt.read(buff);
for (int i = 0; i < buff.length; i++) {
System.out.println(dec2Hex((int) buff[i]));
}

}

public static void main(String args[]) throws IOException {
test1();
// test2();
}

/**
* 十进制转换为十六进制
*
* @param dec
* int
* @return String
*/
public static String dec2Hex(int dec) {
StringBuffer sb = new StringBuffer();
sb.append("0x");

for (int i = 0; i < 8; i++) {
int tmp = (dec >> (7 - i % 8) * 4) & 0x0f;

if (tmp < 10)
sb.append(tmp);
else
sb.append((char) ('A' + (tmp - 10)));
}

return sb.toString();
}

/**
* byte转换为十六进制
*
* @param b
* byte
* @return String
*/
public static String byte2Hex(byte b) {
return ("" + "0123456789ABCDEF".charAt(0xf & b >> 4) + "0123456789ABCDEF".charAt(b & 0xf));
}
}


从字节数组---------转字符

啊 unicode---------------------------------
0xFFFFFFFE
0xFFFFFFFF
0x00000055
0x0000004A

啊 utf-8---------------------------------
0xFFFFFFE5
0xFFFFFF95
0xFFFFFF8A

啊 gb2312---------------------------------
0xFFFFFFB0
0xFFFFFFA1

啊 big5---------------------------------
0xFFFFFFB0
0xFFFFFFDA

啊 iso-8859-1---------------------------------
0x0000003F
? 不能再转回来,有一部分字节都丢失了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值