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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c#csdn_C++ 教程

    c#csdn_C++ 教程C#是微软于2000年6月发布的一种面向对象的、运行于.NETFramework上的高级程序设计语言。它是第一个面向组件的编程语言,同时也是微软.NETwindows网络框架的主角。从语言风格上来讲,C#受到了C,C++和C#的影响,兼顾了各语言的优点,也对各语言存在的问题进行了改进,因此它是一门很优秀的语言。从目前来看,c#大有赶超JAVA之势,它几乎集中了所有关于软件开发和软件…

    2025年9月23日
    5
  • Eclipse安装android插件

    Eclipse安装android插件1.安装ADT:help中的Installnewsoftware中addadt:https://dl-ssl.google.com/android/eclipse/2.安装好SDK,建立虚拟机3.window–preferences–android中选取配置SDK4。编译android项目,runas中选择android项目

    2022年10月4日
    4
  • veriloghdl和vhdl比较_HDL语言

    veriloghdl和vhdl比较_HDL语言VHDL与VerilogHDL的不同点序号区别之处VHDLVerilog1文件的扩展名不一样.vhd.v2结构不一样包含库、实体、结构体。ENTITY实体名ISPORT(端口说明)END实体名;ARCHITECTURE结构体名OF实体名IS说明部分BEGIN赋值语句/元件语句/进程语句END结…

    2022年9月21日
    1
  • 入园记——我的DBA之路

    入园记——我的DBA之路

    2021年9月10日
    53
  • mysql卸载步骤_系统应用怎么卸载步骤

    mysql卸载步骤_系统应用怎么卸载步骤重装卸载了一下午,很多方法都尝试了,最后终于找到一个彻底删干净的方法:1.很多大佬都提到的cmd搜索regedit注册表,打开后找到下面三个目录并删除(要是没有不用管)HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQLHKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQLHKEY_LOCAL_MACHIN

    2022年9月27日
    2
  • early_suspend【转】

    early_suspend【转】[android休眠唤醒机制分析(二)—early_suspend](https://blog.csdn.net/g_salamander/article/details/7982170)是

    2022年7月3日
    20

发表回复

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

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