我一直有个疑问:我在myeclipse这种IDE中的控制台输入的字符是什么编码的?
跟什么因素有关系?IDE设置?操作系统?
还有,system.in是个InputStream,用它读不出String,是不是得加个InputStreamReader?
我自己写了个程序,想看看编码,但是程序的输出我自己也没看明白。。也许是我写的有问题,请高人指教
谢谢~~
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class In {
public static void main(String[] args) throws IOException { //用你这个字做实验,我想看看在各种编码下,二进制都是什么样子
String s = "你";
PrintBytes(s.getBytes("GBK"));
PrintBytes(s.getBytes("UTF-8"));
PrintBytes(s.getBytes("GB2312")); while (true) {
PrintOneByte((byte) System.in.read());
} } //以二进制形式输出一个byte数组
static void PrintBytes(byte[] bytes) { for (int i = 0; i <= bytes.length - 1; i++) {
//调下面那个函数。。
PrintOneByte(bytes[i]);
}
System.out.println();
}
//以二进制形式输出一个byte
static void PrintOneByte(byte oneByte) { int shadow = 1; int temp = (int) oneByte;
for (int p = 7; p >= 0; p--) {
if ((temp & (shadow << p)) != 0)
System.out.print(1);
else
System.out.print(0);
}
System.out.print(" ");
}
}下面是程序的输出:
11000100 11100011 //GBK
11100100 10111101 10100000 //UTF-8
11000100 11100011 //GB2312
你 //我在控制台输入中文“你”,下面是结果,和上面三种编码没有一个相同的。。
11100110 10110101 10100011 11101111 10111111 10111101 00001010
00001101 00001010 //这个事直接按回车生成的CR和LF 我查了ASCII。
跟什么因素有关系?IDE设置?操作系统?
还有,system.in是个InputStream,用它读不出String,是不是得加个InputStreamReader?
我自己写了个程序,想看看编码,但是程序的输出我自己也没看明白。。也许是我写的有问题,请高人指教
谢谢~~
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class In {
public static void main(String[] args) throws IOException { //用你这个字做实验,我想看看在各种编码下,二进制都是什么样子
String s = "你";
PrintBytes(s.getBytes("GBK"));
PrintBytes(s.getBytes("UTF-8"));
PrintBytes(s.getBytes("GB2312")); while (true) {
PrintOneByte((byte) System.in.read());
} } //以二进制形式输出一个byte数组
static void PrintBytes(byte[] bytes) { for (int i = 0; i <= bytes.length - 1; i++) {
//调下面那个函数。。
PrintOneByte(bytes[i]);
}
System.out.println();
}
//以二进制形式输出一个byte
static void PrintOneByte(byte oneByte) { int shadow = 1; int temp = (int) oneByte;
for (int p = 7; p >= 0; p--) {
if ((temp & (shadow << p)) != 0)
System.out.print(1);
else
System.out.print(0);
}
System.out.print(" ");
}
}下面是程序的输出:
11000100 11100011 //GBK
11100100 10111101 10100000 //UTF-8
11000100 11100011 //GB2312
你 //我在控制台输入中文“你”,下面是结果,和上面三种编码没有一个相同的。。
11100110 10110101 10100011 11101111 10111111 10111101 00001010
00001101 00001010 //这个事直接按回车生成的CR和LF 我查了ASCII。
11000100 11100011
11100100 10111101 10100000
11000100 11100011
你
11000100 11100011 00001101 00001010对了,我操作系统是Win7中文的。另外GB2312字符集可以理解为GBK字符集的子集。
String encoding = System.getProperty("file.encoding");
System.out.println(encoding);
关于字符集的,我知道alexandertech(艾瑞克.泰)比较精通,问问他吧。