黑马程序员技术交流社区

标题: java的编码问题Unicode [打印本页]

作者: woshixtdx    时间: 2015-4-23 02:46
标题: java的编码问题Unicode
char 这个是采用unicode 这个我知道,但是String str = "你好"      这个是采用什么编码啊,据我所知道一般是utf-8或gbk,
但是java不是都采用unicode为什么会出现utf-8或gbk呢,请高手指点.

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

String str = "你好"   的编码和机器编码器有关
作者: diy_coders    时间: 2015-4-23 07:23
考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。  注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。
作者: lhwinner    时间: 2015-4-23 10:53
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之后出现的,是三个字节表示一个汉字,但如果是字符可以变成用一个字节表示,节省了内存的空间
作者: 菩提树下的蛋蛋    时间: 2015-4-23 13:14
String 的编码方式应该是根据系统的默认编码。
在创建一个class文件时,eclipse默认使用系统编码方式。故大部分是GBK

作者: 柒夜    时间: 2015-4-23 21:21
unicode只是一种抽象的编码方式,只是一种编码标准。UTF-8、UTF-16都是这种标准的一种实现方式的编码。类似于抽象类和实现类的关系。
作者: woshixtdx    时间: 2015-4-23 22:43
柒夜 发表于 2015-4-23 21:21
unicode只是一种抽象的编码方式,只是一种编码标准。UTF-8、UTF-16都是这种标准的一种实现方式的编码。类似 ...

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

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

如果他说得对的话,实现类重写了方法,覆盖掉原来的方法,不矛盾。我也是不太明白这问题,建议楼主把你具体的程序贴出来,这样可能更好理解。另外,有详细的讲解告诉我吧!一起进步




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2