java 汉字乱码_Java中文乱码问题

java 汉字乱码_Java中文乱码问题一、MyEclipse下的java文件中文乱码问题(MyEclipse6.5):解决方法一:Window–àPreferences…–àGeneral–àContentTypes–àText–àJavaSourceFile中Defaultencoding改写成UTF-8(你所需的编码类型)然后Update,OK确定就可以了。二、1、编码编码比较常用的有:UTF-…

大家好,又见面了,我是你们的朋友全栈君。

一、MyEclipse 下的java文件中文乱码问题(MyEclipse

6.5):

解决方法一:Window

–à

Preferences… –à

General –àContent Types –à

Text –à

Java Source File 中Default encoding 改写成UTF-8(你所需的编码类型) 然后Update,OK确定就可以了。

a4c26d1e5885305701be709a3d33442f.png

二、

1 、编码

编码比较常用的有:

UTF-8 , GBK ,GB2312 , ISO-8859-1 ,除了iso-8859-1 之外的其它三个编码都能很好的支持中文,但它们都兼容 ISO-8859-1 的编码(就是说无论编码怎么改变,只要是

ISO-8859-1

中的字符,永远不会出现乱码)。

GB2312 是中国规定的汉字编码,也可以说是简体中文的字符集编码

;

GBK 是 GB2312 的扩展 , 除了兼容 GB2312 外,它还能显示繁体中文,还有日文的假名 ;

UTF-8也支持中文,但却与 GB 码不兼容(编码值不同)。UTF-8 使用的是可变长的 UNICODE 编码,编码可能是 1 位 16

进制(即ISO-8859-1

中的字符,其编码也是相同的)也有可能是 2 位或

3 位的 16 进制。 UTF-8 的优点是: 1 、 与 CPU

字节顺序无关 , 可以在不同平台之间交流。

2 、容错能力高 , 任何一个字节损坏后 , 最多只会导致一个编码码位损失 , 不会链锁错误 ( 如 GB

码错一个字节就会整行乱码)

,所以在国际化处理中基本都是建议使用 UTF-8

作为编码。

2、文件的编码

虽然说只要设置了正确的编码就可以使字符正确显示了,但如果忽略了文件保存时的编码的话,那可是会让你走进迷雾中的。

文件编码最常使用的有两种:ANSI和UTF-8, ANSI就是我们保存文件时使用的默认编码,而UTF-8则需自己设置。对于编码的改变,我使用的工具是NOTEPAD和ECLIPSE,NOTEPAD使用最简单,只要打开文件后在另存为中选择相应的编码就行了,而且它对编码的支持非常好。而在其它的编辑器中,默认保存的内容都是GB2312或者GBK(NOTEPAD中对应ANSI).而根据前面所说的UTF-8和GBK,GB2312等的编码值是不同的这一点,可以知道,如果文件使用了UTF-8,那么字符编码就必须使用UTF-8,否则编码值的不同就可能造成乱码。而这也就是为什么那么多的人使用了UTF-8编码后还会产生乱码的根本原因。(JS和JSP都是这个道理)

3、资源文件的乱码解决方案

资源文件谁都知道是国际化支持不可或缺的一部分,资源文件的乱码原因也是因为使用了UTF-8做为JSP编码后,没有相应地改变资源文件的文件编码造成的,所以只要对资源文件保存的编码进行更正后,乱码问题也就解决了。当然,你的中文要使用

native2ascii

命令进行正确的转换。

4、调用JS时,JS内容乱码的解决方案。

其实JS的乱码还是跟文件的编码有关系的,如果JS中有中文的话,那JS文件保存的编码就必须跟调用此JS的页面编码相同,否则,你的所有中文都要从JSP页面传给JS才会显示正常。

5、AJAX提交数据乱码,返回数据乱码的解决方案

随着AJAX的流行,乱码问题也开始困扰着许多刚开始使用它的程序员,万变不离其宗,AJAX的乱码问题自然跟编码有关了,我想很多人想到了对文件编码进行设置,并且在接数据时设置了requet的编码,在返回的数据时设置了response的编码一切都以为会很顺利,可是这一切都是徒劳无功的。解决的方法其实很简单,而且其答案就在我们之前处理的JSP乱码之中。让我们先看一下AJAX的经典请求代码

程序代码:

xmlhttp.open( “post”, url, async );

xmlhttp.setRequestHeader( “Content-Type”,

“text/html” );

xmlhttp.send( params );

setRequestHeader并不是不变的,也没人想过去改它,而问题就正好出在这个地方。回想一个JSP页面内容的编码设置,其中有这么一节:

程序代码:

contentType=”text/html;charset=UTF-8″;

现在知道问题了吧,所以我们要把第二句代码改为:

程序代码:

xmlhttp.setRequestHeader( “Content-Type”,

“text/html;charset=UTF-8” );

最后别忘了在返回数据时也设置上:

程序代码:

response.setContentType( “text/xml”

);

response.setCharacterEncoding( “UTF-8”

);

如果要问为什么的话,其实我们可以把xmlhttp看成是一个临时页面,它由浏览器动态生成,主要作用是在后台获得请求的数据(可以看成是一个高级的iframe)。所以对于普通页面设置的编码,对它也要同样设置。而在servlet中返回数据为什么要设置contentType和encoding其道理也是一样的。众所周知,jsp的最后形态就是servlet,而jsp页首设置的那个内容其实也就是让生成的servlet中生成这么两句话:

response.setContentType( “text/html” );

response.setCharacterEncoding( “UTF-8” );

而pageEncoding则是跟jvm说明了这个页面的内容要使用什么编码保存(这跟之后生成的CLASS有关系)。所以在servlet设置response的编码也是理所当然的了。

三、大家都知道,xmlhttp在通信时采用的是utf编码,而国内很多网页的信息都是采用gbk编码,所以当直接通过ajax去连接网页,并将获取到的信息直接显示的话就会出现乱码的现象,有些时候无法改变服务器端网页的编码(例如获取别的网站的天气预报信息),在这种时候就只能在客户端通过js做编码的工作了,下面这段js就是用于将服务器端返回的gbk编码字符串转换为utf编码字符串:

最后是项目中出现的乱码问题及解决方法:

问题描述:使用javascript传递参数的方式将中文参数传给java中的action部件。页面编码为GBK,在javascript用httprequest传递时发生参数乱码的变动的问题,应该是xmlhttp的content-type的问题,但是我们原则上不改变原有代码,因此采用了以下办法。

1,不改变页面编码,仍然维持编码格式为GBK。

2,在javascript附加参数时对参数进行一次转码.采用javascript的方法encodeURI对中文参数进行转换。

3,维持原有xmlhttprequest的content-type不变仍然为:http_request.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);

4,增加一个工具类进行转码处理,增加方法:

程序代码

public

static String isoToUTF8(String str) {

try

{

if

(!str.equals(“”)) {

URLEncoder.encode(str, “gbk”);

str=

new String(str.getBytes(“gbk”), “utf8”).toString();

}

}

catch (UnsupportedEncodingException e) {

m_logger.error(“occurs a exception when change the

coding to UTF8:”, e);

}

return

str;

}

5,修改action中获取request参数的部分代码

ClassName.isoToUTF8(request.getParameter(“parameterName”));

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158634.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dump文件分析工具有哪些_如何解析xml文件

    dump文件分析工具有哪些_如何解析xml文件/前言/在讲解Mat工具之前我们先来看下几个关于Dump/文件的问题Dump文件是什么Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中我们拿到Dump文件有什么用的?假如JVM因为内存溢出的原因宕机了,而程序的日志里面并没有关于溢出所在对象的信息,此时我们就需要通过分析Dump文件来找到问题原因Dump文件怎么生成?第一种在启动JVM时指定参数 #指定生成Dump文件的异常类型 -XX:+HeapDumpOnOutOf

    2022年10月2日
  • oracle锁表处理三步骤

    oracle锁表处理三步骤selectsession_idfromv$locked_object; –425SELECTsid,serial#,username,osuserFROMv$sessionwheresid=425;ALTERSYSTEMKILLSESSION’425,9613′;

    2022年6月16日
  • (3)JMeter元件详解之 Include Controlle 包含控制器

    (3)JMeter元件详解之 Include Controlle 包含控制器

    2021年7月13日
  • j2ee到底是什么_j2ee技术

    j2ee到底是什么_j2ee技术J2EE     是sun公司提出的一个标准,符合这个标准的产品叫“实现”;其中你下载的sun公司的j2ee开发包中就有一个这样的“实现”,     而jboss,weblogic,websphere都是j2ee标准的一个“实现”。由于jboss,weblogic,websphere自身带有j2ee的api,     所以可以不使用sun的j2ee实现。

    2022年10月11日
  • Redis雪崩_redis落地方式

    Redis雪崩_redis落地方式同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对产品失去了信心,什么垃圾产品。设置两个缓存,原始缓存和备用缓存,原始缓存失效时,访问备用缓存,备用缓存失效时间设置长点。设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。雪崩概念在某一个时间段,缓存集中过期失效。…

    2022年9月14日
  • 图像分割的原则_常用的图像分割方法

    图像分割的原则_常用的图像分割方法在对处理后的图像数据进行分析之前,图像分割是最重要的步骤之一。它的主要目标是将图像化分为与其中含有的真实世界的物体或区域有枪相关性的组成部分。根据目标可将图像分割分为:1.完全分割——结果是

    2022年8月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号