中文占用字节数求解 characterstringjava 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了; 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了;我检查我的环境用也是UTF-8编码;System.out.println(Charset.defaultCharset()); 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了;嗯,中文基本明白了,英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢? 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了;嗯,中文基本明白了,英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢?这个是字符集编码问题,在GBK中,英文只有是全角字符才是2个字节,对于一般的英文字符,也就是ASCII编码了,一个字节了; http://blog.csdn.net/zhanghenglei/article/details/7439345这篇博客中 说 java是用unicode来表示字符,"中"这个中文字符的unicode就是2个字节。实际上: String str = "a中"; for(int i=0;i<str.length();i++){ Character ch = str.charAt(i); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ASCII").length+" ASCII"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UNICODE").length+" UNICODE"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UTF-8").length+" UTF-8"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length+" GBK"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GB2312").length+" GB2312"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ISO-8859-1").length+" ISO-8859-1"); }结果:a 16 1 ASCIIa 16 4 UNICODEa 16 1 UTF-8a 16 1 GBKa 16 1 GB2312a 16 1 ISO-8859-1国 16 1 ASCII国 16 4 UNICODE国 16 3 UTF-8国 16 2 GBK国 16 2 GB2312国 16 1 ISO-8859-1显示 UNICODE编码是占 4个字节这是为什么 字符编码问题。楼主要了解常用的字符编码。ASCII、GBK、Unicode、UTF-8了解了字符编码的规则,自然就明白是怎么回事。当然,首先要了解,什么事字符编码。 两个类之间的问题 java 没有include? 请教,myeclipse下载swing插件,我快吐血了。 如何执行一个 EXE 文件 我们JAVA考试题,请指导一,二. 如何在jtable弹出框中选择多个并一次性插入多行数据 关于applet的疑惑? java中可以直接写pl/spl语句吗? 如何处理客户机和服务器使用不同字符集(包括双字节字符)上传或下载文件时文件名的转换问题 JSONObject Map 前面的值为什么会被覆盖呢? java连接数据库例子 使用label.SetText标签不改变,但内存中好像改变了?
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
我检查我的环境用也是UTF-8编码;
System.out.println(Charset.defaultCharset());
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
嗯,中文基本明白了,
英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢?
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
嗯,中文基本明白了,
英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢?
这个是字符集编码问题,在GBK中,英文只有是全角字符才是2个字节,对于一般的英文字符,也就是ASCII编码了,一个字节了;
这篇博客中 说 java是用unicode来表示字符,"中"这个中文字符的unicode就是2个字节。
实际上: String str = "a中";
for(int i=0;i<str.length();i++){
Character ch = str.charAt(i);
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ASCII").length+" ASCII");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UNICODE").length+" UNICODE");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UTF-8").length+" UTF-8");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length+" GBK");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GB2312").length+" GB2312");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ISO-8859-1").length+" ISO-8859-1");
}结果:
a 16 1 ASCII
a 16 4 UNICODE
a 16 1 UTF-8
a 16 1 GBK
a 16 1 GB2312
a 16 1 ISO-8859-1
国 16 1 ASCII
国 16 4 UNICODE
国 16 3 UTF-8
国 16 2 GBK
国 16 2 GB2312
国 16 1 ISO-8859-1显示 UNICODE编码是占 4个字节
这是为什么
楼主要了解常用的字符编码。
ASCII、GBK、Unicode、UTF-8了解了字符编码的规则,自然就明白是怎么回事。
当然,首先要了解,什么事字符编码。