java 中文乱码解决方案,java字符串中文乱码如何解决

java 中文乱码解决方案,java字符串中文乱码如何解决,java中常见的中文乱码总结

本文主要介绍java中常见的中文乱码及其解决方法,主要包括读取字节码文件时出现的乱码。本文通过示例代码给大家做了非常详细的介绍,具有很好的参考价值。感兴趣的朋友可以跟随边肖去看一看。

:

目录

1.IO流2中读取文件时出现乱码的问题。读取字节码文件时出现乱码的问题3。使用Servlet过滤器统一设置整个Servlet项目中的各种编码格式。从阿里云服务器上的mysql数据库读取数据产生的中文乱码。

1.IO流中读取文件时出现乱码问题

1,先记录从文件中读取的数据(当new File())并逐级打包,直到字节输入流(new BufferReader())缓冲并设置编码格式。

//文件路径

字符串路径='???';

//读取文件

File file=新文件(路径);

//包装到文件字节输入流中

file inputstream fis=new file inputstream(file);

//下面的流可以理解为从字节流到字符流的桥梁。

//并且InputStreamReader可以在创建对象时传入所需字符编码的参数。

//这里的数字是“utf-8”

InputStreamReader ISR=new InputStreamReader(fis,' utf-8 ');

//将InputStreamReader包装到BufferReader中。

BufferedReader br=新buffered reader(ISR);

2.字节码文件读取时出现的乱码问题

我在使用eclipse的过程中遇到了一个转码问题。eclipse安装后,在项目属性资源中写的是默认编码格式是GBK。我从来没有换成UTF-8,学习过程中也没有问题,因为GBK编码一直都是统一使用的。

直到有一天我在汤姆猫上运行我Servlet写的代码时发现了一个有趣的现象。

如果我使用response将中文内容直接发送到服务器,就不会出现乱码。

` resp.getwriter()。println ('h1我喜欢吃/h1 ');

但使用BufferReader的readline()方法读取中文内容时,会出现乱码。我试过,无论我修改IO流中读取的字符的编码格式,还是整个项目的编码格式,都无法改变这个乱码问题。

BufferedReader br=新buffered reader(fr);

Br.readLine()//"汤姆!"在这条线下面的图片中

我咨询了我的老师,得到了一个新的解决方案。

向该类添加一行代码。这段代码的意思是检查虚拟机的启动参数。运行后,可以在控制台上看到下图的信息(只剪切了部分片段)。您可以看到有一个名为file.encoding的属性,其值为GBK。

我个人的分析可能是,我创建项目的时候用的是GBK编码,然后我自己跑项目。类的字节码文件已经生成。这时,如果我只在项目中右键单击Properties,就来不及修改编码格式了。

//检查虚拟机启动参数

System.getProperties()。list(system . out);

老师临时给了个解决办法,在这节课会出现乱码的那一行前加了一行。

system . set property(“file . encoding”,“utf-8”);

上面提到的VM参数中file.encoding的值现在更改为utf-8。

其实最根本的解决方法就是在项目创建之初就设定好编码格式,如果像我这样来不及的话可以临时使用这个方法。

3.使用Servlet过滤器Filter统一设置整个Servlet项目中的各种编码格式

Servlet提供了三个组件:servlet filer监听器。

在设置编码格式时,我们可以预设一个全局过滤器,

创建一个过滤器类并添加一个注释@WebFilter(eclipse会在创建过滤器类时自动创建这个注释)。我在这里直接写了/*,表示这个项目中的所有请求都必须先经过这个过滤器的过滤。

@WebFilter('/* ')

公共类EncodingFilter实现筛选器{

公共编码过滤器(){

}

@覆盖

公共void init(FilterConfig fConfig)引发ServletException {

//过滤器初始化时调用,打印输出

//Servlet默认为延迟加载模式

system . out . println(' encoding filter已初始化.');

}

@覆盖

public void destroy() {

//当过滤器被破坏时调用,打印输出

system . out . println(' encoding filter被销毁..');

}

//doFilter方法相当于筛子

//一共四行代码是我们提出的三个需求和一个发布代码。

@覆盖

公共void doFilter(ServletRequest请求,ServletResponse响应,FilterChain链)引发IOException,ServletException {

//设置解析消息的编码格式。

request . setcharacterencoding(' utf-8 ');

//设置用于返回响应的编码格式。

response . setcharacterencoding(' utf-8 ');

//告诉浏览器响应内容是文本和html,文件编码格式是utf-8

response . set content type(' text/html;charset=utf-8 ');

//释放请求

//它包含有关请求来自何处以及将去往何处的信息。

chain.doFilter(请求,响应);

}

}

除了简介的评论形式,过滤器的功能是基于Servlet中的web.xml文件。打开web.xml文件,并在根目录中添加以下代码。

过滤器

!-标签的名字-

过滤器名称编码/过滤器名称

!-标签类别的位置-

filter-classcom.zyj.day02.EncodingFilter/filter-class

/过滤器

过滤映射

!-相应标签的名称-

过滤器名称编码/过滤器名称

!-声明范围的范围-

url模式/*/url模式

/filter-映射

虽然内容比较简单,但是写起来比较复杂,建议用注释来实现功能。

值得一提的是

通过向filter类的init方法添加print语句,我们发现如果您在类名上标记了注释,并在web.xml文件中添加了配置,那么当请求到来时,我们会发现init方法在控制台上执行了两次。虽然目前看起来没什么问题,但总的来说,只有一个。

4,从阿里云服务器上的mysql数据库中读取数据产生的中文乱码

问题描述:

当我在servlet中连接数据库时,我打算实现一个写功能和一个读功能。

本来可以通过sql语句流畅地编写中文,可以在数据库中查询中文,可以在控制台上读取和打印数据。整个过程没有出现乱码问题,但是当我想使用直接从数据库读取中文的“小张”作为我项目中具有登录功能的账号时,发现无法读取正确的数据,于是判断我在账号框中输入的“小张”不存在。我当时是初学阶段,还是找不出哪部分编码格式不一样。

找到了解决方案:

在项目中druid-config.properties(阿里云druid的配置文件)的url属性后拼接一个?CharacterEncoding=utf-8设置从mysql数据库读取数据时的编码格式。

driver class name=com . MySQL . JDBC . driver

Url=jdbc:mysql://你的端口号:3306/estore?字符编码=utf-8

用户名=?mysql数据库的帐号

密码=?mysql数据库的密码

maxActive=30

maxWait=3000

下面补充介绍:java常见中文乱码汇总。

乱码产生的原因:乱码会因为编码方式不同而出现。

哪里是乱码:1。第2页,url地址3。数据库乱码4。数据提交(表单,ajax) 5。开发工具

如何解决:

1.开发工具的统一编码设置

2.设置应用服务器的编码方式,如端口号和编码方式。

3.数据库本身的编码模式

4.强制设置请求和响应的数据编码方法(同时,可以使用过滤器拦截所有编码方法)

5.通过代码强制数据编码(urlencode ('Hello ',' utf-8 '))

这就是本文的全部内容。希望这篇文章的内容能给你的学习或者工作带来一些帮助,同时也希望你能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: