A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© woshixtdx 中级黑马   /  2015-4-23 02:46  /  3332 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
char 这个是采用unicode 这个我知道,但是String str = "你好"      这个是采用什么编码啊,据我所知道一般是utf-8或gbk,
但是java不是都采用unicode为什么会出现utf-8或gbk呢,请高手指点.

最佳答案

查看完整内容

String str = "你好" 的编码和机器编码器有关

15 个回复

倒序浏览
diy_coders 发表于 2015-4-23 07:23
考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字 ...

String str = "你好"   的编码和机器编码器有关
回复 使用道具 举报
考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。  注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。
回复 使用道具 举报
String str = "你好";采用的是什么编码,是根据你所装的JDK默认的设置有关,可以在通过以下程序进行获取:
properties prop = new properties();
set <String> names =prop.stringPropertyName();
for(String s : names)
{System.out.println(s)}
之所以有utf-8和gbk是因为gbk是在unicode之前出现的,为了满足中文输出的需要,但是对于比如日文出现的相同的字符编码不能区分,gbk也是用两个字节表示一个汉字,而utf-8是在unicode之后出现的,是三个字节表示一个汉字,但如果是字符可以变成用一个字节表示,节省了内存的空间
回复 使用道具 举报
String 的编码方式应该是根据系统的默认编码。
在创建一个class文件时,eclipse默认使用系统编码方式。故大部分是GBK
回复 使用道具 举报
unicode只是一种抽象的编码方式,只是一种编码标准。UTF-8、UTF-16都是这种标准的一种实现方式的编码。类似于抽象类和实现类的关系。
回复 使用道具 举报
柒夜 发表于 2015-4-23 21:21
unicode只是一种抽象的编码方式,只是一种编码标准。UTF-8、UTF-16都是这种标准的一种实现方式的编码。类似 ...

不是说java里面为是采用unicode编码吗,全是两个字节表示 一个文字吗,但是utf-8有三个字节表示一个文字,相矛盾了啊。
回复 使用道具 举报
Unicode是一个字符集, 可以看作为内码.
而UTF是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.
回复 使用道具 举报
小宇哥 发表于 2015-4-24 10:41
Unicode是一个字符集, 可以看作为内码.
而UTF是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接 ...

可以举例子不。
回复 使用道具 举报
你对String的原理没有太明白,String str = "你好" 是根据你系统的编码格式和你Eclipse编写程序的工具编码格式决定的,具体的什么格式,是不固定的!
回复 使用道具 举报
在Eclipse里默认是gbk的,但是可以手动设置或者用代码给他编程其他格式,如String str = new String("你好".getBytes(), "UTF-8");本来默认是gbk的,但是这样就编程utf-8格式了
回复 使用道具 举报
Unicode只是一种编码规范而已,当使用Unicode编码的时候,默认的会使用utf-16来编码。uft-16的码表默认所有的字符都是占两个字节。而一般我们使用的eclipse使用的GBK编码的,适用中文
回复 使用道具 举报
xxz 中级黑马 2015-5-27 07:04:16
13#
这个“你好”是你的java文件的默认编码,一般情况是"GBK",
如果你使用工具的工具中可以设置的。
windows系统的默认编码格式是GBK。
一般需要编码时,是在网络传输的时候,网络传输时,只能使用二进制流。
一个中文占两个字节,那么传输的时候,就会拆分,产生乱码。为了避免这种情况。
传输时,会将汉字转成字节,
例如:"你好".getBytes("GBK");
这时候,会以GBK的编码方式将"你好"还原成字节,
不写GBK时,默认是“ISO-8859-1”;
当你需要还原的时候,只需要
new String(byte[] ,"GBK");
就能将字符还原。
回复 使用道具 举报
在硬盘上保存是utf-8或gbk,而程序运行时在内存中是unicode
回复 使用道具 举报
Java默认是采用GBK编码的,不过这个是可以自己设置的。
回复 使用道具 举报
woshixtdx 发表于 2015-4-23 22:43
不是说java里面为是采用unicode编码吗,全是两个字节表示 一个文字吗,但是utf-8有三个字节表示一个文字 ...

如果他说得对的话,实现类重写了方法,覆盖掉原来的方法,不矛盾。我也是不太明白这问题,建议楼主把你具体的程序贴出来,这样可能更好理解。另外,有详细的讲解告诉我吧!一起进步
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马