java os.write乱码_Java变成遇到的简单乱码问题

1.乱码 --- 编码集

编码集的本质是让数字与字符产生一个映射关系,不同的编码集映射实现也不同

比如UTF-8: "中"----> -28  -72  -83 对应三个字节

GBK:   "中"----> -42  -48      对应两个字节

2.乱码 --- 编码集(特殊情况)

a.编码集之间支持的字符不同时,会产生乱码,比如UTF-8支持中文,使用不支持中文

的ISO-8859-1解析,会出现乱码

b.编码集支持的字符相同的情况时,转换字符使用的编码集是会出现乱码

3.常见的乱码场景

a.IO流操作,进行流读取时,数据源是GBK编码集,而程序是UTF-8编码集,导致乱码

b.IO流操作,进行流写出时,程序是UTF-8的,默认文件默认是GBK的,但是竟然没有乱码

总结:字符串在不同程序之间进行传输时,有两种传输依据:

i.以字节为依据

A中存储字符"中"(GBK编码集 -42 -48),传输给B,直接传输字节-42 -48

ii.以字符为依据

A中存储字符"中"(UTF-8编码集 -28 -72 -83),传输给B(不管默认编码集),直接按照UTF-8编码集存储文字

c.数据库操作:

eclipse使用编码集GBK,传输中文字符"中",到MySQL,而MySQL使用编码集(UTF-8),MySQL存储未出现乱码,

因为MySQL会先使用GBK编码集将字节转换成字符,然后再使用UTF-8转化成字节之后再用UTF-8转换成字符存储起来

4、JavaWEB 中乱码问题

响应:

response.setCharacterEncoding("UTF-8");//告诉Tomcat 使用 UTF-8

response.setContentType("text/html;charset=utf-8");//告诉浏览器和 Tomcat 使用 UTF-8 编码集

请求:

request.setCharacterEncoding("UTF-8");//只适用于 POST

GET 和 POST 通用

byte[] buffer = value.getBytes("ISO-8859-1");//"中"在 UTF-8 中字节一样

value = new String(buffer,"UTF-8");//中

地址栏:地址栏有专属的编码方式

java.net.URLDecoder;

java.net.URLEncoder;

URLEncoder.encode(s,enc)进行编码

URLDecoder.decode(s, enc)进行解码

链接提交到服务器用到GET方法,因此可以使用GET处理乱码的方式进行解码

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值