我在一本书上说java的字符是unicode码,每个字符占两个字符.不知对不对.又有人说在键盘输入的字符是要经过GBK编码的,把每个英文字母编成一个字节了,我做了个小测试
inputstream中有一个函数是read(),书上说它一次只能读取一个字节的内容。但得的结果:
system.out.println(system.in.read());
如果我在键盘上敲击A,会输出65,也就是字母A的asc2表的代号。
如果一个字母是占两个字节的,而read一次只能读一个字节,那末为何在这里read()一次就可以把A全部读入了?难道GBK编码的字符,英文占一个字符,中文占两个字符?
inputstream中有一个函数是read(),书上说它一次只能读取一个字节的内容。但得的结果:
system.out.println(system.in.read());
如果我在键盘上敲击A,会输出65,也就是字母A的asc2表的代号。
如果一个字母是占两个字节的,而read一次只能读一个字节,那末为何在这里read()一次就可以把A全部读入了?难道GBK编码的字符,英文占一个字符,中文占两个字符?
解决方案 »
- 使用POI的cloneSheet方法报错,求助
- 一个C#项目,想要的结果没有出来,帮忙看看。
- 谁可以给我一个用applet写的类似用IE下载的时候弹出来的对话框,可以选择保存文件位置的代码
- JAVA题目,不难. 会做的大哥帮忙啊,在线急等.
- Reflect库里的一个基础问题 菜鸟的问
- java的类与方法问题
- 请教:我下载的jdk1.4.2怎么是"LVaA==&GroupName=EedEWQ=="呢?
- dijkstra算法出问题了,求指教!
- 有两个文本框,当在第一个文本框内输入boy时,回车,第二个文本框显示男子
- 关于Java版的贪吃蛇问题,蛇身初始化为3个以上时,蛇就直接死了
- JAVA报表怎么做(在线等。。。急)
- T是代表什么呢?
如果要求输入输出的一致的话:
通常情况下,你会用readLine( )一行一行地读取输入,因此要把System.in包装成BufferedReader。但在这之前还得先用InputSteamReader把System.in转换成Reader。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
GBK也是双字节编码的.在JAVA中输入一个chat类型,它是占两字节的.
inputstream中的函数read(),一次只读取一个字节,但是它还是会变成32位的,只要在它的高位补0,凑成32位就可以了.
一个ascii (0-255)可以用8位二进制表示所以只占一个字节
超过0-255范围就要用二个字节因为8位二进制不够表示了
、
System.out.println(c);
//打印出来的结果是 29579这个对应的二进制是 111001110001011
//如果是A的话打印出来的是 65 对应的是 1000001
//显然Uncode编码不代表每个字都占两个字节。
如果是英文字符 高位自动补0的如果能看懂
windows API MutilByteToWiderChar 就知道了
比如你java源程序设定的编码是gbk,那么一个汉字字符2个字节,如果是utf-8,则是3个字节
public class fd {
public fd() {
String string1 = "aaa";
String string2 = "字字字";
System.out.println(string1.getBytes().length);
System.out.println(string2.getBytes().length);
} public static void main(String[] args) {
new fd();
}
}这个运行后是3 和 9
我用的是utf-8编码 你可以自己试试换个编码
UTF非固定字节编码,1到3个字节不等
UTF-8是1到3个字节不确定
try{
int i ;
i = System.in.read();
char ii;
ii = (char)i;
System.out.print(i);
}catch(Exception e)
{}在ii处设断点,可以使用调试工具看编为"\u0041".呵呵.多一些思考就好了.事物不是一成不变的,Java中字符编都是转来转去的.可以在google中搜一下.