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”));

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Feem(局域网文件传输工具)v4.3.0官方版

    Feem(局域网文件传输工具)v4.3.0官方版Feem是一款非常好用的局域网文件传输工具,软件可以将同一局域网内的不同设备连接到一起,传输文件更加方便,同一局域网下的设备,只要打开Feem就会自动配对连接,发送完了目标设备也就接收完了,免费用户接收的文件会被自动分配到设备上相应的文件夹里面,付费用户可以修改文件储存位置。功能介绍:【轻松发送文字和网页链接】大多数文件传输工具都没有发送文字这个功能,SendAnywhere则…

  • 拉姆达表达式学习(1)

    拉姆达表达式学习(1)我曾经遇到一个项目,项目里面需要经常对一系列的同类型集合进行操作,如对集合进行增加元素,删除集合的指定索引的元素等等.  我们可以使用ArrayList来进行.如1ArrayListstringList=newArrayList();2stringList.Add(“大家好”);3stringList.Add(“你们好”);4stringList.Add(“同志们…

  • 计算机操作系统进程管理总结报告_进程的管理和控制实验报告

    计算机操作系统进程管理总结报告_进程的管理和控制实验报告计算操作系统进程管理一、进程与线程1.1、进程进程是资源分配的基本单位。进程控制块PCB(ProcessControlBlock)描述的是进程的基本信息以及进程的运行状态,我们说的创建及撤销进程都是对进程控制块PCB的操作。进程之间可以并发执行。一个程序中可以有多个进程。1.2、线程线程是独立调度的基本单位。一个进程中可以有多个线程,他们之间共享…

  • fiddler和charles哪个好用_电脑15分钟自动重启

    fiddler和charles哪个好用_电脑15分钟自动重启前言Charles是收费软件,可以免费试用30天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30分钟,并且启动时将会有10秒种的延时。此时,我们只需网上找一个注册码即可解

  • python django做网页_响应式网页怎么做啊

    python django做网页_响应式网页怎么做啊这篇文字适合刚学习Django的同学,如果比较熟的就不用看了。以下都是讲在windows上的部署情况;准备:1、python3.62、pycharm profession(专业版)3、安装Django模块以上的安装就不讲了,比较简单,网上也有很多教程。都去官网下载安装即可。 前言:学习django框架其实就是学习它的文件目录,目录下有一些必须的模块和包,当然你也…

    2022年10月13日
  • PyCharm配置_pycharm安装配置

    PyCharm配置_pycharm安装配置pycharmpycharm是一个比较好的pythonIDE,可以在MACOS和windows上使用,补全功能强大,而且界面十分友好,特别适合python编程人员使用。pycharmPycharm安装Pycharm配置修改成灰底主题显示行号修改字体大小编程字体我推荐运行调试Pycharm安装pycharm的安装地址:http://www.jetbrains.com/

发表回复

您的电子邮箱地址不会被公开。

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