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
? 不能再转回来,有一部分字节都丢失了.
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
? 不能再转回来,有一部分字节都丢失了.