首页 > 编程知识 正文

java读取配置文件乱码,java如何处理乱码

时间:2023-05-03 07:07:18 阅读:171533 作者:1123

一、认识常识:

1.UTF-8国际码、GBK中文码。 GBK中含有GB2312。 也就是说,如果用GB2312编码后可以用GBK解码,则相反的情况可能不成立。

2、web tomcat:默认为ISO8859-1,不支持中文

3.Java.nio.charset.charset.default charset )平台的缺省字符编码;

4.getBytes () )使用平台的默认字符集进行编码。

二.引进

学习哪一种技术时,初学者经常会遇到中文乱码的问题。 例如,因为MySQL没有在安装时设定; servlet也会发生中文乱码的问题

例如:

输出流输出=response.get输出流(;

out.write(string;

输出中文有可能出现乱码;

例如:

protectedvoiddoget (httpservletrequestrequest,HttpServletResponseresponse ) throwsServletException,IOException{

输出流输出=response.get输出流(;

Stringdata='博客';

out.write(data.getbytes ) (utf-8 ) );

输出乱码的问题是,由于程序使用UTF-8编码,浏览器缺省使用GBK进行解码,因此会出现乱码

三. servlet相关的几种乱码

1、浏览器调用jsp、html等页面用中文显示乱码

这种情况需要满足以下两个要求。

)1)文件本身以utf-8编辑和保存(在myEclipse中,在properties中右键单击utf-8 ) )。

)2)用于浏览器的utf-8分析:

(手动)==在浏览器中右键单击编码格式,使其成为utf-8

用(智能)==写入文件)标记模拟响应标头,告诉浏览器使用utf-8进行编码分析

(智能)==response.set content type (' text/html; charset=UTF-8 '; 教浏览器进行utf-8的编码分析

常用:

或者

2、从浏览器调用servlet时,页面上会显示乱码。

servlet乱码分为request乱码和response乱码;

(1)响应乱码问题

解决方法:

网络有效的解决方法是追加:

response.setcharacterencoding (utf-8 );

没能解决。 随后,我找到了另一个解决办法。

response.set content type (' text/html; charset=utf-8 '; 或response.setheader (' content-type ',' text/html; charset=UTF-8 '; 告诉浏览器用utf-8进行分析。 (setHeader是HttpServletResponse的方法。 如果想在拦截器Filter中设置字符编码,则没有这个方法。 因为Filter的doFilter方法的参数类型是ServletResponse。)

填补了两个句子,终于解决了这个问题;

我们应该思考本质:

response.set content type (' text/html; charset=UTF-8 '; 其目的是控制浏览器的动作,即控制浏览器用UTF-8解码;

response.setcharacterencoding (utf-8 ); 目的是response.getWriter ) )输出的字符流的乱码问题。 对于response.getOutputStream (),不需要此解决方案。 这意味着将使用UTF-8对response对象中的数据进行解码后的字节流发送到浏览器。

==情况1 :

【导入】等问题代码示例

在此首先说明错误的原因。 下图是表示乱码的流程图。

解决方案流程图:

==情况2 :

问题代码如下

protectedvoiddoget (httpservletrequestrequest,HttpServletResponseresponse ) throwsServletException,IOException{

printwriter out=response.get writer (;

Stringdata='博客';

out.println(data;

}

浏览器的输出结果是?

理由:“博客”首先封装在res中

ponse对象中,因为IE和WEB服务器之间不能传输文本,然后就通过ISO-8859-1进行编码,但是ISO-8859-1中没有“博客”的编码,因此输出“??”表示没有编码;

错误代码流程图:

而解决方案是:response.setCharacterEncoding("GB2312"); 设置response使用的码表

解决方案流程图:

(2)request乱码问题

request请求分为post和get,对于不同的请求方式有不同的解决乱码的方案;

==>POST请求:

错误原因:

解决方案:

==>GET请求(URI方式传递参数乱码):

出现情况:浏览器访问

如:显示用户名和密码

解决方法:问题本质是get方式传递的参数内容默认编码方式问ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也无法解决问题。

法一:要解决这个问题,修改tomcat服务器的配置文件。修改tomcat目录下的conf/server.xml文件的第43行:

修改前内容:

maxThreads="150"   connectionTimeout="200000"

redirecPort="8443"/>

修改后内容:

maxThreads="150"   connectionTimeout="200000"

redirecPort="8443"    URIEncoding="utf-8"/>

法二:String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8"); (如下图)

法三:URL转换

3、调用数据库出现乱码

安装数据的时候选择UTF-8

四、JSP相关乱码解决方案(部分已经在上面介绍了)

问题描述:通过jsp,html,或servlet中的表单元素把参数提交给对应的jsp或者servlet时,在接收的jsp或servlet中接收到的参数中文显示乱码。

例如:

提交jsp代码如下:

输入表单

用户名:

密   码  :

接收参数的jsp代码如下:

接收表单

request.setCharacterEncoding("utf-8");

%>

用户名:

密     码:

解决方法:在接收post提交的参数前,使用request.setCharacterEncoding("utf-8")设定接收参数的内容格式为utf-8编码。见接收表单中的插入内容即可。当然这种乱码问题最好使用中文过滤器的方法最好。

五、properties文件乱码

问题描述:在使用一些类库或者框架时,为了实现页面内容国际化,需要编写对应的properties文件。而properties文件中的中文内容在显示的时候也会出现乱码。

解决方法:这个乱码问题可以通过jdk中的native2ascii工具解决。使用如下命令:

native2ascii   -encoding   utf-8  display.properties    display_zh_CN.properties

出现乱码问题的原因是因为java编译器只能处理Latin-1或unicode编码的字符文件。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。