Java中,内存的字符表示的是Java的unicode编码?系统中的文件表示的是系统的默认编码? 50

还有,在系统中存在一个utf8编码的文件为什么使用Reader类读入时会使用GBK来转换,而不是使用unicode编码来转换?大神求解... 还有,在系统中存在一个utf8编码的文件为什么使用Reader类读入时会使用GBK来转换,而不是使用unicode编码来转换?大神求解 展开
 我来答
microroom
科技发烧友

2018-12-07 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1611万
展开全部
1、Java中,字符在内存中是用unicode编码的

2、系统中的文件默认是用默认编码编码的。解释一下:对于每个语言/区域,比如中文/中国,中文/台湾,英语/美国,英语/英国,系统都指定一个特定的编码方式,当读取或保存文件时,如果不指定要使用何种编码方式或读取时在文件中找不到编码方式的识别码(姑且这么叫吧,作用是帮助识别文件的编码),就会使用这个特定的编码方式,这就叫默认以默认编码方式编码或解码。
如果文件中存在一个utf8编码的文件,Reader类读入它时,为什么要使用GBK来转换呢?因为它笨,它只会使用默认编码来转换,而此系统的默认编码恰好是GBK,如果默认编码是其它的,它也会选择那个对应的默认编码来转换,不要以为Reader类就不犯错。所以,使用Java的io类库时,有时需要自己指定编码,不要以为Java类为你搞定了一切。回头想想,Reader类表现得有点欠佳,这也很正常。毕竟,这世上有那么多的编码方式,Reader类怎么能尽知你的文件使用的是哪一个,即便它都知道,也不可能有能力处理这么多的编码方式啊。所以它不管对错,只认一种——默认编码方式,负责选择正确的编码方式,那是软件开发者和这个文件使用者的责任。
追问
Reader类不是负责读入的吗?Java使用unicode编码,那么应该是由系统特定的编码(该文件为utf8)转换为unicode编码吧?怎么会是转换为GBK呢?
追答
Reader是为使用它的客户程序服务的,它要对文件进行解码。要解码就必须知道文件的编码方式,在使用Reader时,如果你不明确指定你的文件的编码方式,Reader假定你的文件是用默认编码方式编码的,因此解码时也用默认编码方式解码。如果你的系统指定的默认编码方式是GBK,自然用它解码。解码后数据就变成了保存到文件以前,它原来的样子,如果原来是用UNICODE编码的,解码后不还是UNICODD编码的吗?
比如,你有一个字符char c='好';在java中它是用UNICODE编码的,然后你将它保存到文件中(以字符形式),并不指定要使用何种编码,那就会使用默认编码对它进行编码,然后保存。当你在默认编码一样的系统上读取这个文件时,如果也不指定编码方式,那使用默认编码方式解码后,不就还原它原来的样子了吗。如果它原来是用unicode编码的,现在还是啊。
xl8191250
2018-12-07 · TA获得超过1046个赞
知道小有建树答主
回答量:739
采纳率:36%
帮助的人:128万
展开全部
这是java语言设计时就规定好了的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
红颜祸水970
2018-12-07
知道答主
回答量:5
采纳率:0%
帮助的人:3847
展开全部
是的,默认的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
美女合集娱乐音乐
2018-12-07
知道答主
回答量:22
采纳率:0%
帮助的人:1.7万
展开全部
孤魂野鬼滚滚滚
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式