一句话彻底明白java乱码问题

本文探讨了字符串编码方式与乱码之间的关系,强调了解决乱码问题的关键在于理解并保持字符串源头编码的一致性。文章通过实例展示了如何正确地在不同环境中处理字符串编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一句话提醒了我,就是在设置哪种编码方式的前提是你知道你的字符串的源头是什么编码方式。这也就解答了所有乱码的原因,也就是乱码的原因就是我们没有按照这个字符串的源头的编码方式使用或者传输。字符串常见的源头有:java源代码或者可以说class文件,数据库数据,文件等,当我们在源头定义一个字符串的时候我们肯定是以某种编码方式对他编码的,因为字符只有编码才能保存到电脑,我们只要记住,在源头怎么编码的我们就怎么使用这个字符串就肯定不会有问题。例如,我在java代码中定义一个字符串 String str = “hello我是一个字符串”; 我们的java文件一般都是用UTF-8保存,假如我们在windows生产环境上运行代码的时候,用到了对这个字符串MD5加密,其中会调用str.getBytes(),这里使用getBytes()的时候我们没有明确指定编码方式也没有配置jvm -Dfile.encoding,这个时候jvm会取系统默认编码方式GBK,相当于调用了str.getBytes(“GBK”); 一个源头是UTF-8的字符串我们以GBK的方式使用,无论你怎么转换都是错误的,反之同理。
数据库和文件中的字符也是同样的道理,例如我们java平台在数据库中取数据传输给C++平台,如果我们的数据库字符是GBK正常显示的编码,那么我们传输给C++平台的时候就以GBK的方式解码传给他,C++端拿到之后也要以GBK方式编码之后才能正常显示。

明白了这个道理我们知道设置了jvm -Dfile.encoding=UTF-8解决了乱码问题是因为你字符的源头是UTF-8的,我们在getBytes()的时候指定正确的编码方式效果也是一样的。另外包括在JSP、HTML、txt等所有涉及字符编码方式的地方都是同样的道理,我们以什么样的编码方式正确使用字符取决于他的源头。

所以,彻底解决这个问题的方法就是,我们要知道字符串的源头是什么编码方式,并且以源头的编码方式使用和传输字符。

//在写项目中遇到的可以解决前台传递的中文乱码问题
<%=new String(request.getParameter("bigType").getBytes("iso8859-1"),"utf-8")%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值