标题:如何能够得到一个String 有多少个byte呢?也就是这个string的大小
只看楼主
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
得分:0 
以下是引用Eastsun在2007-9-3 15:56:08的发言:

我不是指这个意思.
JAVA String内部用的是UTF-16编码,用char[]保存

但是一个对象占多少内存还与很多因素有关,比如String对象的大小不仅仅指它表示字符串所占空间的大小.
在C/C++中可以使用sizeof()操作符来得到一个对象的大小,但在JAVA中没有直接的方法来得到它.

这儿有篇文章介绍了如何在JAVA中实现sizeof的功能:
http://www.javaworld.com/javaworld/javaqa/2003-12/02-qa-1226-sizeof.html?page=1

哦呵呵。偶理解错了。不过这个问题偶还是不是很清楚。比如String s = "java";它是按照UTF-16编码的呢?还是用GBK编码(中文操作系统)。我以前以为只要是中文操作系统就按照GBK编码。

2007-09-03 16:33
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
得分:0 
不知道我的理解对不对。大家看看。我的理解是虽然JAVA中把所有的字符都当作Unicode字符,但是在对这个Unicode字符编码的时候却不一定是按Unicode字符集所对应的编码来编码(比如UTF-16,UTF-8等),相反对unicode字符的编码具体是按照具体平台的ANSI编码来编码的。所以当在中文操作系统用JAVA下写的软件,拿到日文操作系统上说不定就是乱码。如果都是按照UTF-16编码,那么到日文操作系统上就应该也正常才对。所以在编写跨平台的系统时,一般指定编码为UTF-8。不知道对不对。请大家指正。
2007-09-03 17:05
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
算对了一半吧
记住,只要String还在内存中,那么就肯定是按照Unicode来编码,两个字节,一个都不会少,一个也不会多。

但是,一旦String被打算持久化或者转换为Byte[],那么将会面临被持久化到的操作系统平台字符编码不兼容问题。在LINUX下是UTF8(3个Byte),而在WIN下是GBK(2个Byte)。
这个时候就必须显式指定转换的编码.getBytes("UTF8");

所以当在中文操作系统用JAVA下写的软件,拿到日文操作系统上说不定就是乱码。 --- 没听说过。

淘宝杜琨
2007-09-03 17:47
yutao
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-8-31
得分:0 
真都很强,佩服!~
2007-09-03 19:53
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
得分:0 
讨论最后变成编码问题了。。。最近写JSP老要改编码。。。一不小心就乱码了。。。
2007-09-04 08:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-167337-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.340053 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved