java字符串编码识别_java字符串编码问题

本文详细阐述了字符编码的基础知识,包括Unicode、UTF-8和GBK等编码方式。重点介绍了Java中从操作系统读取文件和写入文件的过程,强调了字符到字节的转换以及可能出现的乱码问题。同时,提到了Java IO中的Reader/Writer和InputStream/OutputStream在处理字符和字节流的角色,并解释了转码问题的关键在于字符到字节的转换过程。
摘要由CSDN通过智能技术生成

首先unicode是字符集,保存着字符与16进制数的对应,每个字符都对应这一个编号也就是两个字节的16进制数。而utf-8,gbk这些称为编码方式,其将十六进制数根据具体的算法转化为2进制保存在内存中,一个字符保存在内存中的值不一定是编号。java采用unicode编码保存所有字符,其实就是每个字符在内存中都使用两个字节存储编号,不做转换。

(1)从os文件系统中读取文件的过程:文件是以指定编码保存在系统中,其字节到字符的映射就是编码完成的工作。首先,读取二进制流,以指定编码的方式转化为unicode编码也就是编号,放入内存。读取完毕,如果指定编码错误,同样的二进制流编码体系中没有对应的字符,就以默认字符填充,也就是??之类的。这就是读取乱码的根源。

(2)从java写入os文件系统的过程:将unicode方式保存的16进制编号按照指定编码规范映射为该编码对应的字节流写入文件。

(3)所谓的转码问题就是字符到字节之间的转换,javaio有两大类Reader/Writer直接读取字符,其实也是封装了字节流读取,只是默认使用了系统编码进行从字节到字符的转换;InputStream和OutputStream则读取字节流。两者之间的转化其实就是使用InputStreamReader,OutputStreamWriter时指定转换的编码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值