java怎么解决乱码

java怎么解决乱码

java怎么解决乱码

java在字符串中统一用Unicode表示。

对于任意一个字符串:String string = “测试字符串”;

如果源文件是GBK编码,操作系统默认环境编码也为GBK,那么编译的时候,JVM将按照GBK编码将字节数组解析为字符,然后将字符转换为Unicode格式的字节数组,作为内部存储(字节数组→字符→Unicode字节数组)(推荐教程:java教程)

当打印这个字符串时,JVM根据操作系统本地的语言环境,将Unicode转换为GBK,然后操作系统将GBK格式的内容显示出来。

立即学习“Java免费学习笔记(深入)”;

当源码文件是UTF-8, 我们需要通知编译器源码的格式,javac -encoding utf-8 … , 编译时,JVM按照utf-8 解析成字符,然后转换为unicode格式的字节数组, 那么不论源码文件是什么格式,同样的字符串,最后得到的unicode字节数组是完全一致的,显示的时候,也是转成GBK来显示(跟OS环境有关)

乱码是如何产生的?

本质上都是由于字符串原本的编码格式与读取时解析用的编码格式不一致导致的。

乱码指的是程序显示出来的字符文本无法用任何语言去解读。一般情况下会包含大量的?。乱码问题是所有计算机用户或多或少会遇到的问题。造成乱码的原因就是因为使用了错误的字符编码去解码字节流,因此当我们在思考任何跟文本显示有关的问题时,请时刻保持清醒:当前使用的字符编码是什么。只有这样,我们才能正确分析和处理乱码问题。

例如最常见的网页乱码问题。如果你是网站技术人员,遇到这样的问题,需要检查以下原因:

● 服务器返回的响应头Content-Type没有指明字符编码

● 网页内是否使用META HTTP-EQUIV标签指定了字符编码

● 网页文件本身存储时使用的字符编码和网页声明的字符编码是否一致

java代码中的乱码问题如何解决呢?

例如:String s = “测试字符串”;

System.out.println( new String(s.getBytes(),"UTF-8")); //错误,因为getBytes()默认使用GBK编码, 而解析时使用UTF-8编码,肯定出错。

登录后复制

其中getBytes()是将Unicode转换为操作系统默认格式的字节数组,即“测试字符串”的GBK格式,new String (bytes, Charset) 中的charset 是指定读取byte的方式,这里指定为UTF-8,即把bytes的内容当做UTF-8来读取。

如下两种方式得到的结果都是正确的,因为它们的源内容编码和解析用的编码是一致的。

System.out.println( new String(s.getBytes(),"GBK"));System.out.println( new String(s.getBytes("UTF-8"),"UTF-8"));

登录后复制

那么,如何利用getBytes 和 new String() 来进行编码转换呢? 

网上流传着一种错误的方法:

GBK--> UTF-8: new String( s.getBytes("GBK") , "UTF-8);

登录后复制

这种方式是完全错误的,因为getBytes 的编码与 UTF-8 不一致,肯定是乱码。

但是为什么在tomcat 下,使用 new String(s.getBytes(“iso-8859-1”) ,”GBK”) 却可以用呢?

答案是:

tomcat 默认使用iso-8859-1编码, 也就是说,如果原本字符串是GBK的,tomcat传输过程中,将GBK转成iso-8859-1了,默认情况下,使用iso-8859-1读取中文肯定是有问题的,那么我们需要将iso-8859-1 再转成GBK, 而iso-8859-1 是单字节编码的,即他认为一个字节是一个字符, 那么这种转换不会对原来的字节数组做任何改变,因为字节数组本来就是由单个字节组成的,如果之前用GBK编码,那么转成iso-8859-1后编码内容完全没变, 则 s.getBytes(“iso-8859-1”) 实际上还是原来GBK的编码内容则 new String(s.getBytes(“iso-8859-1”) ,”GBK”) 就可以正确解码了。 所以说这是一种巧合。

如何正确的将GBK转UTF-8 ? (实际上是unicode转UTF-8)

//利用getBytes将unicode字符串转成UTF-8格式的字节数组,然后用utf-8 对这个字节数组解码成新的字符串new String( s.getBytes("utf-8") , "utf-8");

登录后复制

UTF-8 转GBK原理也是一样

new String( s.getBytes("GBK") , "GBK");

登录后复制

其实核心工作都由getBytes(charset)做了。getBytes的JDK描述:Encoding this String into a sequence of bytes using the named charset,storing the result into a new byte array.

OutputStreamWriter w1 = new OutputStreamWriter(new FileOutputStream("D:\file1.txt"),"UTF-8");InputStreamReader( stream, charset)

登录后复制

可以帮助我们轻松的按照指定编码读写文件。

以上就是java怎么解决乱码的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2604859.html

(0)
上一篇 2025年3月6日 19:57:14
下一篇 2025年2月18日 01:05:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • java下载的文件名乱码

    java下载的文件名乱码     JAVA文件下载时乱码有两种情况: 1,下载时中文文件名乱码 2,下载时因为路径中包含中文文件名乱码,提示找不到文件 解决方法见下面部分代码(推荐教程:java教程) 立即学习“Java免费学习笔记(深入)…

    2025年3月6日 编程技术
    200
  • java项目jsp报错

    java项目jsp报错 有时在导入maven项目时,jsp页面一直报错,具体解决方法及步骤如下: 1、在pom.xml配置文件中添加上javax.servlet的相关依赖:      javax.servlet     servlet-ap…

    2025年3月6日
    200
  • eclipse打开java文件出现乱码

    问题: eclipse打开java文件出现乱码 解决方法: 首先确认下java文件的编码是什么格式,选择乱码的java文件右键选择properties,进入该文件的设置页面,选择resources属性,在页面下方可以看到Text file …

    2025年3月6日 编程技术
    200
  • java怎么导入包?

    当你在向java类中导入某些包的时候(比如:import javax.servet.*)会报错,提示没有这个包。那是因为我们使用的jdk的jre system library库中没有包含servet_api.jar。 这个时候我们可以可以在…

    2025年3月6日 编程技术
    200
  • java中如何读取文件

    java中读取文件的方法:1、通过使用【java.io】方法读取,相对于当前用户目录的相对路径读取;2、通过使用【java.lang.ClassLoader】方法读取,相对于classpath的相对路径读取。 java中读取文件的方法: j…

    2025年3月6日
    200
  • java post请求乱码解决方法

    Java WEB项目中,中文乱码是一个经常遇到而又非常头痛的问题,其中最容易出现乱码的环节就是在浏览器向服务器发送请求的过程。下边就这一问题介绍解决方法,希望会帮助到大家。以下转码都是以UTF-8为参考,若为其他编码格式可自行修改。 一、R…

    2025年3月6日
    200
  • java中请求乱码解决方法

    出现的问题: 通过get请求向服务器发送请求时,如果请求参数为中文时,服务器端接受到的参数为乱码。 乱码原因分析及解决办法: 1、关于解码和编码 立即学习“Java免费学习笔记(深入)”; 编码:’中’→111000…

    2025年3月6日
    200
  • java出现乱码的原因与解决方法详解

    java在字符串中统一用Unicode表示。(推荐:java视频教程) 对于任意一个字符串:String string = “测试字符串”; 如果源文件是GBK编码,操作系统默认环境编码也为GBK,那么编译的时候,JVM将按照GBK编码将字…

    2025年3月6日
    200
  • java页面乱码解决方法

    在页面提交到tomcat乱码 解决方法是在tomcat/conf/server.xml中进行配置(推荐:java视频教程) 以tomcat6.0.32为例,需将以下代码: Xml代码 登录后复制 改为: 立即学习“Java免费学习笔记(深入…

    2025年3月6日
    200
  • java文件名中文乱码解决方法

    JAVA文件下载时乱码有两种情况:(推荐:java视频教程) 1,下载时中文文件名乱码 2,下载时因为路径中包含中文文件名乱码,提示找不到文件 解决方法见下面部分代码 立即学习“Java免费学习笔记(深入)”; response.setCo…

    2025年3月6日 编程技术
    200

发表回复

登录后才能评论