getByte(。。)的问题 推荐下次楼主发贴前先仔细搜一下知识库http://dev.csdn.net/user/whodsow这里有很详尽的解释 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式 是使用字节流的。 因此java要对这些字节流经行转化。char是unicode的,而byte是字节. java中byte/char互转的函数在sun.io的包中间有。其中bytetocharconverter类是中调度, 可以用来告诉你,你用的convertor。其中两个很常用的静态函数是 public static bytetocharconverter getdefault() ; public static bytetocharconverter getconverter(string encoding); 如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用 8859_1 我们来就一个简单的例子: "你"的gb码是:0xc4e3 ,unicode是0x4f60 你用: --encoding="gb2312"; --byte b[]={(byte)'\u00c4',(byte)'\u00e3'}; --convertor=bytetocharconverter.getconverter(encoding); --char [] c=converter.convertall(b); --for(int i=0;i --{ -- system.out.println(integer.tohexstring(c[i])); --} --打印出来是0x4f60 --但是如果使用8859_1的编码,打印出来是 --0x00c4,0x00e3 ----例1 反过来: --encoding="gb2312"; char c[]={'\u4f60'}; convertor=bytetocharconverter.getconverter(encoding); --byte [] b=converter.convertall(c); --for(int i=0;i --{ -- system.out.println(integer.tohexstring(b[i])); --} --打印出来是:0xc4,0xe3 ----例2 --如果用8859_1就是0x3f,?号,表示无法转化 -- 很多中文问题就是从这两个最简单的类派生出来的。而却有很多类 不直接支持把encoding输入,这给我们带来诸多不便。很多程序难得用encoding 了,直接用default的encoding,这就给我们移植带来了很多困难 //以下是ntzls给我发的短消息,:)多谢各位,明白些了str.getBytes("8859_1")返回字节数组,将原str的UNICODE码(16位,JAVA存储方式)通过8859-1进行编码,8859-1不支持中文(8位)所以此时print的是乱码。new String(byte[],"decode")是将字节数组通过decode进行解码,但需保证byte[]是按decode编码的,否则矛盾了,得不到正确的字符。new String(str.getBytes("8859_1"),"gbk");//如果str中含中文能正确输出吗?如是从流中读取的是按其他中文方式编码则new String(b[],"其他中文编译方式");一般中文操作系统默认编码为GBK。8859-1 (Latin-1) Latin-1 覆盖大多数的西欧语言,比如阿尔巴尼亚, 加泰罗尼亚语, 丹麦, 荷兰,英语,法罗群岛,芬兰,法语,德语,加利西亚,爱尔兰,冰岛, 意大利,挪威,葡萄牙,西班牙和瑞典。缺少荷兰的 ij连字(i与j合字) ,法国的 oe(o与e合字)和旧风格的',,' 而德语中``(这样的)引号是可以的。 几乎所有的WEB容器在其内部默认的字符编码格式都是以ISO-8859-1为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以UTF-8的方式来传递参数的。所以,虽然我们的Java源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以ISO-8859-1来处理的。 楼上的众多兄弟把问题说得比较清楚了,其实,你还可以在tomcat(如果你用的是这的话)可以在web.xml中改一下字符,就能解决这个问题 格式化输出时的%b代表如何 如何解决JTree中不同结点设置不同图标? 用JAVA如何读取系统服务的状态 做一个博客系统 程序问题 ,大家快来看看 。 如何添加 package包? 求创建三个线程打印ABC问题 cannot resolve symbol 怎样解决java程序暂停的问题? 有谁知道关于Applet中怎么样调用html. 50分全送 如何在TextArea上加KeyListener事件啊 问个比较弱的问题:关于输入流缓冲
是使用字节流的。 因此java要对这些字节流经行转化。char是unicode的,而byte是字节.
java中byte/char互转的函数在sun.io的包中间有。其中bytetocharconverter类是中调度,
可以用来告诉你,你用的convertor。其中两个很常用的静态函数是
public static bytetocharconverter getdefault() ;
public static bytetocharconverter getconverter(string encoding);
如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用
8859_1
我们来就一个简单的例子:
"你"的gb码是:0xc4e3 ,unicode是0x4f60
你用:
--encoding="gb2312";
--byte b[]={(byte)'\u00c4',(byte)'\u00e3'};
--convertor=bytetocharconverter.getconverter(encoding);
--char [] c=converter.convertall(b);
--for(int i=0;i --{
-- system.out.println(integer.tohexstring(c[i]));
--}
--打印出来是0x4f60
--但是如果使用8859_1的编码,打印出来是
--0x00c4,0x00e3
----例1
反过来:
--encoding="gb2312";
char c[]={'\u4f60'};
convertor=bytetocharconverter.getconverter(encoding);
--byte [] b=converter.convertall(c);
--for(int i=0;i --{
-- system.out.println(integer.tohexstring(b[i]));
--}
--打印出来是:0xc4,0xe3
----例2
--如果用8859_1就是0x3f,?号,表示无法转化 --
很多中文问题就是从这两个最简单的类派生出来的。而却有很多类
不直接支持把encoding输入,这给我们带来诸多不便。很多程序难得用encoding
了,直接用default的encoding,这就给我们移植带来了很多困难
str.getBytes("8859_1")返回字节数组,将原str的UNICODE码(16位,JAVA存储方式)通过8859-1进行编码,8859-1不支持中文(8位)所以此时print的是乱码。
new String(byte[],"decode")是将字节数组通过decode进行解码,但需保证byte[]是按decode编码的,否则矛盾了,得不到正确的字符。
new String(str.getBytes("8859_1"),"gbk");//如果str中含中文能正确输出吗?
如是从流中读取的是按其他中文方式编码则
new String(b[],"其他中文编译方式");
一般中文操作系统默认编码为GBK。8859-1 (Latin-1)
Latin-1 覆盖大多数的西欧语言,比如阿尔巴尼亚, 加泰罗尼亚语, 丹麦, 荷兰,英语,法罗群岛,芬兰,法语,德语,加利西亚,爱尔兰,冰岛, 意大利,挪威,葡萄牙,西班牙和瑞典。缺少荷兰的 ij连字(i与j合字) ,法国的 oe(o与e合字)和旧风格的',,' 而德语中``(这样的)引号是可以的。
几乎所有的WEB容器在其内部默认的字符编码格式都是以ISO-8859-1为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以UTF-8的方式来传递参数的。所以,虽然我们的Java源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以ISO-8859-1来处理的。