电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

乱码问题范文

来源:火烈鸟作者:开心麻花2025-09-191

乱码问题范文(精选9篇)

乱码问题 第1篇

1 先要了解字符集概念

字符集就是一套字符和编码,在存取页面字符时,是将字符集变成编码形式进行存储;在显示页面字符时,是将存储的编码翻译成页面字符的过程。由此我们可以知道:

1.1 当存取字符和显示字符时采用了不同的字符集,将出现“乱码”

此时网页显示如图1。

我们可以看到中文是正常显示的,且页面编码方式也是选择对的“简体中文(GB2312)”,当我们更换为Unicode(UTF-8)时,“乱码”就出现了。有时我们会遇到浏览器总是不能正确选择你想要的编码方式而出现“乱码”现象,我们可以在页面顶端添加header("content-type:text/html;charset=gb2312");告诉浏览器使用哪种方式进行字符集翻译与显示。

1.2 当网站的各网页采用了不同的编码方式,而导致部分页面出现“乱码”的现象

当我们解决“乱码”问题时,多个网页会出现字符集不一致情况,导致部分网页出错。当我们只是改变某个页面的字符集时,没有更改某些软件“新建文件”默认的编码方式时,会出现,新建的文件都不能正常显示的情况。

明白了字符集是什么,当我们再遇到“乱码”时,首先要尝试是否更改页面的编码方式是否能正常显示中文,再进一步确定“乱码”出现的原因。

2 了解开发环境中遇到的几个软件及它们所使用的默认字符集

2.1 PHP脚本编写软件

PHP脚本编写软件有Dreamweaver、Easy Eclipse for PHP、Eclipse studio等,这些软件一般在新建网页时都有默认的字符集,当然也可以在新建后修改页面字符集,这样就麻烦了,所以在写网站之前就要计划好所用字符集,让整个网站都采用统一字符集:

1)对已存在页面查看页面属性,修改成统一字符集。在Dreamweaver中点击“修改”“页面属性”“标题/编码”。

2)修改新建页面参数设置,保证所有新建页面都和已有页面都采用统一字符集。在Dreamweaver中点击“编辑”?“首选参数”?“新建文档”进行设置。

2.2 Web服务器:Apache

有时我们虽然强制指定了页面采用某种字符集,但浏览器总是按另一种字符集解释而成“乱码”,这种情况大多是由Apache进行PHP代码动态解析时造成的。指定页面采用哪种字符集解释有三种方法,我们对它们的优先级作出如下结论:

最低级:在页面中使用,当下面两种都没设置时该设置才有效。

中间级:PHP配置文件php.ini中的default_charset。当在php.ini中配置该参数后,页面中标签将不起作用。

最高级:header("content-type:text/html;charset=gb2312")。当页面中包含此语句时,此语句决定页面最终所用字符集,配置文件及的设置都将不起作用。

2.3 数据库服务器:MySQL

MySQL中默认字符集的设置有四级服务器级、数据库级、表级、字段级的字符集设置,设置的范围越小,优先级越高。我们可以通过设置范围大的字符集,如数据库级,在表级和字段级均采用默认,不加设置,这样很方便就实现了整个数据库字符统一编码,无须再对表级和字段进行字符集整理。当然对数据库设置的字符集要和页面指定、Web服务器指定相统一才能出现预期的页面。

2.4 PhpMyAdmin

很多人喜欢使用XAMPP、WAMP之类的集成AMP平台安装包,这些软件中大多都包含了PhpMyAdmin,因此有人奇怪为:页面显示是正常的,但在PhpMyAdmin显示的中文全都成了“乱码”?我们就要分析:页面显示既然是正常的,那么数据就没有问题,PhpMyAdmin显示出问题了,所以一定是PhpMyAdmin的字符集默认设置出了问题,我们可以在PhpMyAdmin目录下,找到config.inc php配置文件,修改其中的“$cfg['DefaultCharset']='utf-8';”,这样页面显示就不再出现“乱码”了。

3 从动态页面显示的过程追踪“乱码”出现的根源

动态页面的显示过程可以分为:脚本源文件编辑、Apache服务器解析、Mysql数据库支持、数据传递过程四个环节,让好多初学者发蒙的原因主要有两个:

3.1 只注意了某个或部分环节的字符集编码的统一

为了能让送入到数据库中的数据能在浏览器中显示,以上四个环节的字符集均必须要统一才行。前面三个环节在文章的前半部分已有说明,只要保证各环节的一致就可以了,我们既然保证了数据库和网页源文件的字符集一致了,肯定不能因为数据传递过程这个环节而出错。我们可以通过下面两种方法来限制数据传递过程中所采用的字符集。

方法一:mysql_query("set name'gbk'");

方法二:mysql_set_charset('gbk',$link);

3.2 没有注意数据在最终形态是什么

这也是容易糊涂的主要原因,找贴找了半天、各种方法试了个遍,仍然解决不了,那么很有可能:“数据库中的数据本为就是乱码”,对“乱码”不管用什么字符集编码进行尝试都仍然是“乱码”,而且是乱上加乱。很多“乱码”的情形是这样的:向数据库添加数据的页面由于第一种原因使得进入库中的是“乱码”,这是开发者并不知道,而当从数据库是提出数据进行页面显示时,才发现出现“乱码”了,这时总是从提取显示环节去寻求“乱码”问题的解决是徒劳的,将原有的数据添加页面的字符集改一致了,也没用,因为错误的编码已经被送到数据库中存放了。所以这种问题的解决,我们要从数据的添加到数据的显示全程测验,不能只追查显示环节。

4 其他原因出现的“乱码”

平时多了解PHP的开发规范,对PHP的相关函数如:iconv()、mb_convert_encoding()、urlencode()等多作了解,多看些应用示例,问题也能迎刃而解。

5 如何在初始时就避免“乱码”的出现

有人或许认为“乱码”太可怕了,“乱码”问题的解决太复杂了,其实不然。“乱码”的出现及“乱码”的解决都是因为不正确的字符集编码理解不统一而导致的,当我们在PHP网站开发之前,我们就对所有的字符集做了统一调整,开发时遵循PHP开发规范,根本就不会出现所谓的“乱码”问题。另外,从使用情况来看,用uft-8格式进行网站的统一编码,统一字符集、解决中文“乱码”问题的难度要小很多,建议初学者使用utf-8字符集。

最后说明,其实AMP环境并不乱,只是由于我们想当然的指定某个环节的字符集编码而导致出现了五花八门的“乱码”问题,至于“乱码”的解决需要读者在不断的实践中增加经验,并对要对big5、gbk、gb2312、utf-8等字符集都要有所了解,对“乱码”的解决肯定会得心应手,顺利跨过初学者的门槛。

参考文献

[1]Stefan Hinz,Paul DuBois等.Mysql官方文档[DB/OL].http://dev.mysql.com/doc/refman/5.1/zh/charset.html.

Win 7乱码问题终极解决 第2篇

一、Windows 7乱码问题来龙去脉

旅居香港的姐姐安装的是我提供的简体中文版本的Windows 7旗舰版,按理是可以顺利兼容简体软件的,然而问题就出在姐姐对默认的安装设置进行了修改。因为姐姐经常使用繁体软件,她将系统的“区域和语言”的“格式”、“位置”、“默认输入语言”、“非Unicode程序的语言”都设置成了更加顺手的香港繁体。

我们知道Unicode也可称为统一码,为每种语言的每个字符设置了统一且唯一的二进制编码,以满足跨语言、跨平台进行文本转换处理的要求,然而,还是有不少程序并不支持该编码,这时就有必要设置非Unicode程序使用的语言编码了。像迅雷这样的软件就支持简体中文编码,而不支持Unicode,当设置了香港繁体的非Unicode就会出现乱码,同理,将非Unicode设置为简体后,很多不支持Unicode的繁体软件也会出现乱码。这个乱码问题难道是两难的吗?其实,我们使用Windows 7的语言包补丁安装功能就可以顺利解决。

二、巧妙解决Windows 7乱码

1.安装合适的语言包

首先,要能安装多种语言包的Windows 7只能是旗舰版或者企业版,接着我们就来解决这个问题吧,

我们点击“开始-Windows Update”打开自动更新窗口。

在窗口中点击“34个可选更新”链接,在可以下载安装的语言包列表中选择“繁体中文语言包”,确定即可。

回到刚才的窗口点击“安装更新”按钮开始下载安装。

安装完语言包补丁需要重启。重启的过程需要配置补丁。

2.合理设置区域和语言

安装完繁体中文语言后,我们还需要进行合理的配置。进入控制面板的“时钟、语言和区域”选项,选择“管理”选项,将“非Unicode程序中所使用的当前语言”设置为“中文简体”。

该设置需要重启计算机。接着我们安装所有的简体软件,比如:迅雷、QQ等,这时这些软件的乱码已经消失了。

而且系统界面已经变成了繁体中文的了。

由于以后日常使用的软件基本是繁体的,我们再次通过“时钟、语言和区域”选项将“非Unicode程序中所使用的当前语言”设置为“香港繁体”。再次重启系统后即可设置完成了。这时就可以正常安装使用繁体中文软件,以后再次安装简体中文软件需重新设置“非Unicode程序中所使用的当前语言”为简体中文。

Web开发中乱码问题的研究与解决 第3篇

程序员尤其是网络程序开发者不可避免地会和各类字符编码打交道, “字符与编码”也是一个被经常讨论的话题, 但还是有很多程序员在遇到乱码问题时感到无从下手或对一些字符编码感到迷惑不解。虽然有很多具体的方法可以用来消除乱码, 但我们并不一定理解这些方法的原理, 而有的乱码产生的原因, 实际上是由于底层代码本身有问题所导致的。因此, 不仅初学者对字符编码感到模糊, 有的底层开发人员同样对字符编码缺乏准确的理解。本文主要针对Web应用开发中常用的的字符编码进行介绍, 并对Java Web应用开发中常见的中文乱码问题进行分析并提出解决方案。

2 字符编码标准

计算机存放字符串时, 不是存储字符本身, 而是存储字符相对应的二进制表示, 即每个字符在字符编码集中的编号。从字符编码的发展历程分析, 大致可以分为3个阶段:

2.1 ASCII编码 (单字节) (SBCS:Single-byte character set)

计算机最初只支持英文, 其它语言不能在计算机中存储和显示。而英文字符最常用的编码方式就是ASCII码 (American Standard Code for Information Interchange, 美国信息交换标准代码) 。它是基于罗马字母表的一套编码系统, 其采用一个字节的数字来代表一个字符在计算机中的表示, 其能够表达的字符数为28=256 个, 而所有的英文字符 (大小写不同) 、数字及一些常用控制符等只使用了其中一部分, 即字节最高位为0的128个字符编码, 所以ASCII码实际上所表达的字符数只有128个。如英文字符串“China2008”在内存中的存储方式为:

此外, 利用大于128 部分的空间的不同定义规则, 就形成了对其它欧洲语言的扩展字符集ISO-8859系列, 包括ISO- 8859- 1 (西欧字符) 、ISO- 8859- 2 (中欧和东欧字符) 、ISO- 8859- 7 (希腊字符) 等。它们8位编码的最高位为 1, 又分别扩展出了128个各自的字符。

2.2 ANSI编码 (双字节) (DBCS:double-byte character set)

随着计算机技术的发展, 需要其能支持更多的语言, 而用一个字节来表示字符显然不能满足像中文、韩文和日文这样字符数量巨大的语言的需要, 为此人们扩展使用二个字节来表示一个字符。同时为了保持与ASCII码的兼容, 约定第一个字节的最高位为0时 (<128) , 其编码表示与ASCII码相同, 而最高位为1时 (>128) , 其与后面的一个字节共同表示一个扩展语言字符。即第一个字节为128-255时表示一个扩展语言字符, 其表示的字符个数为128+128256=32896个, 按照这种定义方式, 不同的国家和地区制定了不同的标准, 由此产生了简体中文GB2312、GBK、繁体中文BIG5、日文SJIS等字符集。如字符串“北京2008”在计算机中GB2312编码的表示为:

这些从ASCII扩展的编码方式, 英文部分都是兼容的, 但扩展部分的编码由于采用不同的方式制定, 它们是不兼容的, 虽然很多字在3种体系中写法一致 (例如“中文”这两个字) , 但在相应字符集中的坐标不一致, 所以GB2312编码的字符用BIG5看就全是乱码了。另外在浏览其他非英语国家的页面时 (比如包含有德语的人名时) 经常出现奇怪的汉字, 就是由扩展位的编码冲突造成的。

对于中文编码来说, GB2312字符集中包括6千多个常用汉字, 但还是达不到包括全部汉字的要求, 因此后来又制定了GBK以及GB18030标准, GBK字符集是GB2312的扩展, GBK里大约有2万9千多个字符, 除了保持和GB2312兼容外, 繁体中文字, 甚至连日文的假名字符也能显示。而GB18030则是一个更复杂的字符集, 采用变长字节的编码方式, 能够支持更多的字符。GBK以及 GB18030标准向下与GB2312编码兼容, 向上支持ISO10646国际标准。

2.3 Unicode编码 (双字节)

为了使国际间信息交流更加方便, 有必要制定一种全球统一的字符编码, 为此, 国际组织制定了Unicode字符集, 为各种语言中的每一个字符设定了统一并且唯一的数字编号, 以满足跨语言、跨平台进行文本转换处理的要求。目前一般采用2个字节来存放一个Unicode字符, 因此, 这种方式存放的字符也被称为宽字节字符。比如“中文123”在计算机中表示为:

互联网上70%以上的信息都是英文的, 如果网络传输都用Unicode, 每个英文字符都要用两个字节来表示, 对于空间和网络流量都是一种浪费。为了解决这个问题, Unicode制定了3套编码方式, 它们分别是UTF-8、UTF-16和UTF-32。在UTF-8 (Unicode Transformation Form 8- bit form) 中, 字符是以8位序列编码的, 它将Unicode的双字节字符用1到3个字节表示。其英文及常用字符编码和 ASCII码一样用1个字节表示, 这个字节的值小于128 (x80) , 而对于其它语言字符则用一个值位于128~256之间的字节开始, 再加后面紧跟的若干个字节表示。如重音文字、希腊字母或西尔字母等采用2个字节表示, 汉字则使用3个字节表示等。这样在程序处理过程中所有字符用16位编码表示 (双字节) , 但在存取转换成字节流时使用UTF-8格式转换, 对于英文字符来说和原来用ASCII 方式存取时相比大小仍然是一样的, 而对中文来说和原来的GB2312编码方式相比, 大小增加了50%。UTF-16和UTF-32分别是Unicode的16位和32位编码方式。通常所说的Unicode编码指的一般就是UTF-16。虽然Unicode字符也是双字节字符集, 但其与GB2312、GBK等双字节编码机制有很大差别, 而且相互之间也没有对应的转换规律。

通过前面的介绍, 我们了解了计算机中编码的大致分类。在实际开发过程中, 没有必要去深究每一种编码具体把一个字符编码成哪几个字节, 我们只需要知道所谓“编码”就是把字符转换为若干个字节的数字就可以了。

3 字符乱码产生的原因

字符乱码在Web应用系统开发中一直是一个令开发者感到头疼的问题, 特别是开发数据库系统时更是如此。一般来说, 乱码产生的根源在于使用的字符编码标准不统一。如前所述, 各国都有自己的字符编码标准, 有时一个字符使用1个字节表示, 有时采用2个字节表示。如对计算机中存储的同一组编码采用不同的字符编码标准进行解析, 则会得出不同的结果, 即可能会出现字符乱码。换句话说, 产生字符乱码最主要的原因就是在开发系统的各个环节或阶段中使用的字符集不一致或者前后不兼容, 从而使字符在被调用和显示过程中不能被下一阶段正确的识别, 所以出现了乱码。

在Java Web应用开发过程中, 对中文的正确显示产生影响的环节主要包括:

(1) 操作系统环境 (Windows, Linux) :Windows XP已经能够很好的支持GBK了, 如果使用的是Linux或Unix, 则需要检查字符集环境的设置。

(2) 数据库环境 (Oracle, MySQL等) :数据库管理系统一般都有默认采用的字符集, 或在安装过程中选择使用的字符集。如Oracle 10g默认采用Unicode字符集, 而My SQL则在安装过程中可以设置使用的字符集。

(3) 编程环境 (Java, C++) :Java语言在内部采用Unicode编码, 已经可以很好的支持中文显示, 并可以通过代码设置具体使用的字符编码标准。

(4) 中间件环境 (应用服务器, 如Tomcat, Weblogic, JBoss) :Tomcat默认的编码标准是ISO-8859-1, 可以在server.xml文件中进行修改。

(5) JSP页面:JSP网页在编译时, 可以在页面中通过代码设置输出到客户端的数据编码标准, 以及页面脚本使用的字符编码等。

4 字符乱码的解决方案

如果在Java Web应用开发过程中出现乱码问题, 主要解决方法有以下几种:

4.1 修改应用服务器的server.xml配置文件

例如, Tomcat服务器默认的编码是ISO-8859-1, 可以把它改成中文编码。具体是修改Tomcat的server.xml文件, 示例代码如下 (加粗部分) :。

本例修改为GBK编码, 当然也可以使用其它字符集编码, 但一定要注意使前后环节使用的字符集统一或者前后兼容。

4.2 修改数据库采用的字符集

当前主流的数据库系统一般都可以很好的支持中文, 如Oracle、SQL Server 2005等, My SQL数据库系统默认采用的字符集是Latin1, 因此需要在安装时指定它的默认编码, 用编写代码创建数据库表时, 也应该在后面加default charset=GBK等指定表的编码, 如果使用工具创建数据库或者表, 一般会有字符集选项, 此时应将其设置与前后环节统一的字符集标准。

如果在数据库读写过程中, 涉及中文的地方全部是乱码, 可以试着在连接数据库URL中加入如下代码, 一般问题即可解决。useUnicode=true&characterEncoding=GBK

4.3 JSP页面中设置字符编码标准

在JSP页面的头部加上如下代码:

request代码主要指定客户端提交数据即向JSP页面输入数据时具体使用的字符编码标准。浏览器默认使用UTF-8编码方式来发送请求, 当请求数据中包含中文时, 解析就会出现乱码, 因此通过request对象将请求数据编码设为GBK就可以了。不同的Web服务器和不同的JDK版本, 对同一JSP页面的解析可能不同, 使用response对象可以设置服务器输出页面的编码格式。

5 结论

本文首先对当前常见的字符编码标准进行了介绍, 然后据此分析出中文乱码出现的主要原因在于开发过程中各个环节所采用的编码标准不统一, 为此, 针对Java Web应用开发过程中的主要环节, 提出了解决中文乱码的具体方案。在实际开发过程中, 应根据具体情况具体分析, 弄清乱码产生的真正原因, 然后采取相应的解决方法, 才能从根本上解决乱码问题。

摘要:从计算机存储及传输字符的编码标准入手, 介绍各种不同的字符编码标准, 然后对开发过程中乱码产生的根本原因进行分析, 并针对开发过程中的主要环节, 提出解决乱码问题的可行方案。

关键词:Web应用开发,中文乱码,字符编码

参考文献

[1]邹竹彪.JSP宝典[M].北京:电子工业出版社, 2007.

[2]刘中兵.Java Web主流框架整合开发[M].北京:电子工业出版社, 2008.

[3]包竹苇, 李淼, 张建.Java网络传输中字符编码问题的研究[J].计算机工程与应用, 2007 (4) :120-122.

乱码问题 第4篇

注意这几个方面:

一、就是控制面板中,系统时区、语言等的设定。这些大家都会设了,不过设了以后乱码还是有的,但这步骤还是必须的。

二、坛子中流传最广的解决方法:

打开注册表键 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFontAssocAssociated Charset

确定下面这两项的值是 YES.如果没有则自己创建。

“ANSI(00)”=“YES”

“OEM(FF)”=“YES”

在一些版本中,此法可解决一些乱码问题,如迅雷、QQ旋风等的大部份乱码可以解决,

但是仍有部分软件存在乱码,比如光影魔术手就几乎是面目全非了,还有佳能相机的相片导入程序,也是全部的问号。何况在较新版本中,系统本身都已经把这两项设置成YES了,但还是有乱码。要解决这些,还得做第三步ghost xp sp3。

三、昨日偶然发现的

打开注册表键 HKEY_CURRENT_USERControl PanelInternational,将右侧:“Locale”=“00000409″ 改成 ”Locale“=”00000804″

改了要重启。

乱码问题 第5篇

1 Web应用的常用编码

Web应用中常用的编码主要有ISO8859-1,GB2312,GBK,Unicode和UTF-8。

1.1 ISO8859-1

ISO8859-1,是国际标准化组织内ISO/IEC 8859的第一个8位字符集,属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。

1.2 GB2312/GBK

GB2312和GBK是中华人民共和国国家标准汉字信息交换用编码,简称国标码,专门用来表示汉字,是双字节编码。其中GBK编码能够用来同时表示繁体字和简体字,而GB2312只能表示简体字。

1.3 Unicode

Unicode(统一的字符编码标准集)使用2个字节对每一个字符进行编码,是Java语言默认的字符集。

1.4 UTF-8

UTF-8编码,用1到6个字节编码Unicode字符,用在网页上可以在同一页面显示中文简体繁体及其他语言。

2 Web应用中的中文乱码问题的分析

在Web应用中,通常包括了浏览器、Web服务器、Web应用程序和数据库等部分,每一部分都有可能使用不同的字符集,从而导致字符数据在各种不同的字符集之间转换时出现乱码问题。

在弄清Web应用中的中文乱码问题前,先明确理解Java Web开发中所用到的JSP/Servlet应用程序中的几个有关编码设置的方法。

在JSP/Servlet中主要有以下几种方式可以设置编码("***"表示编码方式):

1)page Encoding="***"

2)content Type="text/html;charset=***

3)request.set Character Encoding("***")

4)response.set Character Encoding("***")

其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet中。

1)page Encoding="***"的作用是设置JSP编译成Servlet时使用的编码。

2)content Type="text/html;charset=***"的作用是指定对服务器响应进行重新编码的编码。

3)request.set Character Encoding("***")的作用是设置对客户端请求进行重新编码的编码。

4)response.set Character Encoding("***")的作用是指定服务器响应客户端请求时进行重新编码的编码。

JSP文件的运行过程如图1所示。

当JSP引擎把JSP文件按page Encoding所指定的编码方法编码转换为Servlet文件时,若page Encoding没有指定,则按照content Type所指定方法编码。若二者都没有指定,则将按照JVM的默认编码方法进行编码。若这一步骤编码不支持中文,则JSP文件中的中文转化为Servlet文件时本身就是乱码。

客户端浏览器在发送和接收数据时,按照JSP文件的content Type所指定的编码方式来对URL和参数编码。服务器在接收数据时,按照request.set Character Encoding的设置对数据进行编码,在发送数据时,按照response.set Character Encodingcontent Typepage Encoding的优先顺序对要发送的数据进行URL编码。在这个过程中,如果参数中包含中文,而没有设置好编码方式,服务器在处理数据的过程中就会出现中文乱码问题。

3 Java Web开发中文乱码问题的解决方法

3.1 页面显示乱码

如果在访问某个JSP页面或者Servlet产生的页面时,页面上本应显示中文信息的地方,却显示为乱码,这可能是浏览器显示不正确,也可能是后台在动态生成界面的时候,其内容就是乱码。

如果是浏览器显示的问题,需要设置JSP或者Servlet的content Type属性。对于JSP中的设置使用的是page指令,设置如下:

<%@page content Type=”text/html”;charset=”GB2312”>

对于Servlet生成的页面,可以在输出页面之前调用response的set Content Type()方法,其代码形式如下:

response.set Content Type(“text/html;charset=GB2312”)

另外,在生成的HTML文件的头部可以加入如下代码:

以减少中文乱码的发生。

3.2 用户提交的数据是乱码

当表单中提交的中文数据出现乱码时,原因是request对浏览器提交的数据解码不正确。根据表单提交方式的不同,此类乱码问题有两种解决方法。

对于表单中POST方式提交的数据,数据是作为请求的消息体发送的,默认情况下采用ISO8859-1编码,所以要设置请求对象的字符编码,代码形式如下:

request.set Character Encoding("GB2312")

在响应页面上使用response.set Character Encoding("GB2312")设置编码方式。

如果需要处理的页面过多时,单个处理就会比较麻烦,这时可以通过设置过滤器将所有的request编码都进行设置。

对于表单中GET方式提交的数据或者URL提交的数据,只在接收数据的JSP文件或Servlet文件中设置request.set Character Encoding参数是不行的,因为在Tomcat5.0中,默认情况下使用ISO8859-1对URL提交的数据和表单中GET方式提交的数据进行编码。因此,在这种情况下,需要修改Tomcat的server.xml文件。具体方法如下:

在Tomcat的server.xml文件中,在port号为8080的Connector元素中增加一个属性:URIEncoding="GB2312"。

3.3 数据库中的数据是乱码

如果在写入数据库的时候出现乱码,而我们确定是以GB2312的编码方式发送到数据库上的,那么说明数据库可能不支持GB2312的格式。如果数据库支持中文,那么乱码问题可能就是出现在读取数据库的过程中发生了编码转化。

以My SQL 5.0为例,解决中文汉字编码可以采取下面的方法:

1)在向表中插入中文时,先把中文字符编码转换为ISO8859-1编码,然后再插入表中,而读取时,先把数据库中的内容转换为GB2312编码,再读取。这种方式虽然有效,但是使用起来非常繁琐,而且容易出错。全球化软件开发中要求尽量避免使用这种编码方式。

2)修改My SQL的配置文件。打开my.init文件,把[mysqld]区的语句default-characterset=latin1修改为default-characterset=GB2312,在[client]区增加default-characterset=GB2312。修改后,数据库默认支持的编码格式就被改成了GB2312编码,这样就根本解决了My SQL的数据库乱码问题。

4 结论

综上所述,我们了解了Web应用中常用的编码方式,分析了Java Web应用开发过程中的编码转换,找到了在J2EE平台下Web应用中出现中文乱码问题的根源,并针对不同的情况给出了具体的解决方案,这对于解决中文乱码问题,将会有很大的帮助。

摘要:在利用Servlet/JSP技术开发Java Web应用程序的时候,不可避免的会遇到中文乱码问题,本文首先介绍了Web应用中常用的编码方式,然后分析了J2EE平台下Web应用中文乱码问题产生的原因,并在此基础上针对不同情况提出了解决方案。

关键词:Java Web开发,中文乱码,字符编码

参考文献

[1]孙卫琴.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社,2005.

[2]孙鑫.Java Web开发详解[M].北京:电子工业出版社,2007.

[3]刘永立.Java环境下Web程序的中文乱码问题与对策[J].电脑编程技巧与维护,2011(14):136-139.

[4]张洪伟.Tomcat Web开发及整合应用[M].北京:清华大学出版社,2006.

[5]刘长生,谢强,丁秋林.Java应用中的汉字乱码问题分析[J].计算机科学与发展,2006,16(1):158-161.

[6]耿祥义,张跃平.JSP实用教程[M].北京:清华大学出版社,2007.

[7]李刚.轻量级JavaEE企业应用实战——Struts2+Spring+Hibernate融合开发[M].北京:电子工业出版社,2008.

乱码问题 第6篇

基于JSP/Servlet技术的Java Web应用开发中,中文乱码是个如影随形的问题,总是挥之不去,对于Java Web应用开发的初学者造成不少的困扰。Java Web应用是由多种Web组件协同合作的,同时还需要浏览器和数据库的支持,中文乱码问题产生的根源就在于这些Web组件之间、或web组件与浏览器、与数据库所使用的字符集标准不统一。因此,要解决中文乱码,其基本原则就是:保持数据传输的起点、终点、传输通道上的编码一致。

1 几种典型乱码情形解决方案

下面分几种常见的情形给出中文乱码的解决方案,这些解决方案统一使用UTF-8作为编码字符集。

1.1 浏览器显示中文时的乱码

浏览器在显示JSP页面时,若页面含中文内容,可能会出现中文乱码,其原因是:JSP页面与浏览器的字符集不匹配。

解决方案:让JSP页面与浏览器使用统一的编码字符集。可在JSP中使用如下代码实现:

其中,pageEncoding="utf-8"代表JSP使用utf-8字符集,contentType="text/html;charset=utf-8"代表浏览器使用utf-8字符集解释收到的数据。

若是从Servlet向浏览器输出内容,可在Servlet中使用如下代码使浏览器采用utf-8编码进行显示:

1.2 获取表单中文参数时的乱码

对于

表单,在JSP/Servlet中可采用request.getParameter(“参数名”)来获取参数值,但若不做适当处理,表单参数值为中文时就会发生乱码问题。这是因为,表单参数使用post方式提交时,是通过request对象传输的,且Tomcat对其的编码方式是iso-8859-1,当表单页和获取表单的组件不是采用与之相同的字符集时就会出现乱码了。

解决方案:让表单页、封装表单数据的request对象和接收表单数据的组件采用统一的编码字符集。假定表单页为index.jsp,接收表单页为receive.jsp,则具体如下:

1)表单页index.jsp:

2)接收表单数据页receive.jsp:

若接收表单的是Servlet,则在Servlet中,取表单参数值之前先使用request.setCharacterEncoding ("utf-8") 进行转码即可。

1.3 进行数据库操作时的乱码

这里数据库以MySQL为例进行讨论。当JSP/Servlet要与数据库进行交互时,若JSP/Servlet、传输通道、数据库三者采用的编码字符集不一致也会导致乱码问题的出现。传输通道是指:JSP/Servlet连接数据库的连接对象。

解决方案:

第一步:确定JSP/Servlet采用utf-8编码,要写至数据库的中文数据正常,若数据来自表单,则参考1.2正确取到中文参数值。

第二步:确定数据库采用utf-8编码。对于MySQL而言,可以使用其配置向导设置数据库采用utf-8作为默认字符集;创建表时,对于允许中文的字段,设字段的字符集为utf-8。

第三步:连接MySQL数据库的连接对象上设置字符集为utf-8。假设数据库名为db1,则获取连接的数据库URL如下:

其中,useUnicode=true&characterEncoding=utf8为关键代码,表示连接对象(即数据的传输通道)采用utf-8编码字符集。

2 结论

JSP/Servlet开发Java Web应用时的中文乱码问题虽然恼人,但只要把握住解决问题的基本原则:保持数据传输的起点、终点、传输通道上的编码一致,在出现中文乱码后仔细检查各处的编码字符集是否一致并即时予以纠正,相信初学者也能很好地解决中文乱码问题了。

摘要:基于JSP/Servlet技术的Java Web应用开发中, 中文乱码是个恼人的问题, 给开发者带来不小的麻烦, 本文就着重讨论了JSP/Servlet开发中几种典型的中文乱码问题, 并给出了相应的解决方案。

关键词:JSP/Servlet,中文乱码

参考文献

[1]孙卫琴.Tomcat与Java Web开发技术详解[M].电子工业出版社, 2005, 8.

乱码问题 第7篇

1Java中字符编码规则

1) ISO8859-1编码, 通常也叫Latin-1或西欧语言, 属于单字节编码, 最多能表示的字符范围是0~255, 应用于英文系列, 是Java1) ISO8859-1Latin-10~255Java网络传输使用的标准字符集。网络传输使用的标准字符集。

2) GB2312/GBK编码是中国国家标准汉字信息交换编码, 专门用来表示汉字, GBK是对GB2312的扩充, 采用双字节编码, 可以同时兼容繁体字和简体字, 而GB2312只能表示简体字, GBK是兼容GB2312编码的。

3) Unicode编码, 可以用来表示所有语言的字符, 属于最统一的编码[8]。使用的是定长的双字节或四字节进行的编码, 为每个字符设定唯一的二进制编码。但该编码不兼容ISO8859-1编码, 也不兼容任何编码。Unicode编码可以满足跨语言、跨平台进行文ISO8859-1Unicode本转换及处理的要求, 又称为万国码。本转换及处理的要求, 又称为万国码。

4) UTF-8编码[1],

UTF-8编码兼容ISO8859-1编码, 兼容Unicode编码, 兼容同时也可以用来表示所有语言的字符, 不过, UTF-8编码是不定长编码, 每一个字符的长度从1~6个字节不等。另外, UTF-8编码自带简单的校验功能。一般来讲, 英文字母都是用一个字节表编码, 每一个字符的长度从1~6个字节不等。另外, UTF-8编码自带简单的校验功能。一般来讲, 英文字母都是用一个字节表示, 而汉字使用3个字节。示, 而汉字使用3个字节。

2Java Web中编码机制

为了能够让用Java编写的程序能够在各种语言平台下运行, Java在其内部使用统一的Unicode字符集来表示字符。一个Java源程序的转码过程是先根据操作系统默认的编码方式读取源文件, 通过I/O操作得到相应编码的字节流, 将得到的字节流转换成Unicode, 最后再转换成UTF-8编码写入到Class文件中。转化过程如图1所示:[2]

Java源文件字符编码的转换过程

当操作系统是简体中文时, 默认的编码都是采用GBK, 编译时采用GBK编码方式读取转化成Unicode, 再转换成UTF-8写入到Class文件中。此文件在原来系统中访问不会出现中文乱码问题, 但当该文件移植到英文系统中后, 此时就会出现中文乱码问题。原因是Java采用UTF-8读取Class文件, 再将Class文件转换成Unicode, 但此时无法采用系统默认编码ISO8859-1对编码进行解码。同理, 如果把在英文操作系统下编译的文件移植到中文系统下去访问, 也会出现中文乱码问题。通过源文件的编译和反编译可以发现, 在编码转换的过程中, 都是通过Unicode编码作为中介来完成的, 此时造成乱码的根本原因是使用错误的字符集解码字节流或者将给定的字节流用错误的字符集解码。

3 JSP运行原理

3.1 JSP运行过程

当客户端向服务器发出JSP请求时, 服务器接收到请求后就将请求交个应用服务器, 此时应用服务器就创建request和response对象并判断JSP对象是否存在, 如果不存在再判断该JSP文件是否存在, 如果不存在就产生404错误, 如果请求的文件存在, 此时就将JSP文件转换成Java文件并编译Java文件, 加载类、实例化、初始化, 将request和response作为参数传递个service () 方法, 该方法执行结果是HTML代码, service执行完毕后就删除request、response, 应用服务器将结果返回给Web服务器, Web服务器把结果返回给浏览器, 浏览器进行解析显示;如果请求的对象存在, 就直接将request和response作为参数传递个service方法, 继续向下执行, 其运行过程如图2所示:

JSP运行过程

3.2 JSP转换为JAVA的过程

在开发Java Web应用程序时, 主要有两类文件, 一类是JAVA文件, 另一类是JSP文件。客户在访问JSP文件的时候, 服务器先把JSP文件转换成JAVA文件, 然后再将JAVA文件编译成Class文件。JSP文件主要是用来设计界面的, 里面就不可避免的会有很多中文, 在JSP转换成JAVA文件的时候, 我们必须指定一种支持中文编码的方式来进行转换, 否则将按照ISO-8859-1的方式进行转化, 而ISO-8859-1不支持中文, 转换后的JAVA文件中包含中文的地方一定是乱码, 编译后显示也一定是乱码。例如以下JSP程序代码:

将这段代码转换成JAVA文件的时候, 当遇到<%@page import="xxx"%>就将该语句转换为Java文件的引入包语句, 当遇到pa-geEncoding的时候, 无论contentType中的charset设置的是什么编码;最后都是按照pageEncoding设置的编码方式进行转换;如果pageEncoding没有设置编码方式, 就按contentType中的charset设置的编码方式进行转换;当contentType中没有设置charset编码方式, pageEncoding中也没设置编码方式, 此时就按ISO-8859-1进行转换, 此时如果JSP页面中有中文, 转换的时候中文就不能正常转换, 显示的时候一定会出现乱码。pageEncoding是用来设置JSP编译成Servlet是的编码方式。当JSP文件转换成JAVA文件的时候, 遇到contentType中的内容时, 就将里面的内容转化成如下代码:response.setContentType ("text/html;charset=utf-8") , 如果content-Type中没有设置charset, 此时JAVA代码中的charset的值就使用pageEncoding设置的值, 如果contentType中的charset和pageEn-coding都没有设置, 则在JAVA代码中charset就采用ISO-8859-1, 此时如果JSP页面中有中文, 显示一定是乱码。contentType中的charset主要使用来设置响应数据的显示编码。一个典型的JSP文件编译成一个java文件的过程如图3所示:

JSP文件转换成Java文件的流程

4 Java Web中的中文乱码的分析及解决

通过上面的分析, 在网页上出现乱码一定是在中文转码的过程中出现了编码和解码不一致, 而在jsp动态网站开发过程中, 出现乱码的主要可分一下几种情况:页面显示乱码, 表单提交乱码, 从数据库读取数据乱码, 配置文件乱码, cookie乱码等。

4.1 JSP页面显示中文乱码

JSP页面显示乱码也有多种情况, 如果仅仅只是浏览JSP页面时就显示乱码, 其主要原因有以下几种情况:

1) 保存JSP页面的时候就出现了乱码, 在有的开发工具中默认的都是ISO-8859-1编码, 如果没有更改, 并且也没在代码中指定其编码方式, 此时JSP页面中若有中文, 保存的时候肯定就是乱码。

2) 操作系统版本不同, 当编译好的Class文件移植到其它操作系统中运行时, 也可能出现乱码。

3) 在JSP中<%@ page contentType="text/html8;charset=字符编码" %>没有指定charset的编码或指定的编码不支持中文, 如果没指定则按pageEncoding的编码设置, 当pageEncoding也没指定的时候就按系统默认的ISO-8859-1编码进行设置, 而ISo-8859-1不支持中文, 此时肯定显示乱码。

为了解决此种乱码, 在开发过程中, 我们可以指定charset的编码和pageEncoding的编码, 而且二者的编码最好一致, 即可以这样设置<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>, 为了保证所使用的浏览器能够正确的解析, 最好在<head></head>标签中加入如下代码<meta http-equiv="Content-Type" content="text/html; charset=utf-8">[6]。

4.2 表单提交中文乱码

1) 采用post方式提交显示乱码及解决方案

提交表单数据有Post和Get两种方法[4]。当采用post方式提交的时候, 提交的数据是通过Http的实体内容发送给服务器的, 此时发送的数据根据浏览器的contentType中的charset编码方式对数据进行编码, 服务器在接收的时候也需要对request对象的setCharacterEncoding () 设置正确的解码方式, 此时的设置应该是charset中的编码方式和setCharacterEncoding () 设置的解码方式一致, 否则会出现乱码。

2) 采用get方式提交显示乱码及解决方案

当表单采用get或参数方式提交数据的时候, 其数据是附加在URL中, 从Tomcat5.0以后, 对URL中的数据默认情况下采用ISO-8859-1的编码方式进行编码, 此时在JSP中设置的charset对URL中的数据无效, 当然在servlet中如果只是对request对象的setCharacterEncoding () 设置其编码方式是无法正确解析URL中传递过来的参数的, 此时为了解决这种情况下的乱码, 需要在servlet中添加如下代码:Stringstr=newString (request.getParameter ("参数名") .getBytes ("ISO-8859-1") , "utf-8") 。

4.3 访问数据库中文乱码解决方案

当应用程序通过JDBC向数据库写入数据或从数据库中读取数据的时候, 如果应用程序的中文编码和数据库的默认编码方式不一致时, 则可能出现乱码。在Java应用程序和数据库之间传递数据时, 默认情况下都是以ISO-8859-1编码格式, 当向数据库中存入带中文的数据时, 应用程序内部都是将Unicode编码格式的数据转换为ISO-8859-1编码, 然后传递到数据库, 在数据库端, 默认情况下按ISO-8859-1编码存储, 而ISO-8859-1不支持中文, 所以就会出现乱码。解决该类型乱码的最简单方法 (以MySQL为例) 是修改MySql的配置文件[3]。打开<MySQL Server 5.1my.init文件, 把[mysql]区的语句改成default-character-set=utf8, 在[client]区的语句增加default-character-set=utf8, 修改后重新启动数据库, 这样就解决了MySQL数据库中乱码问题。

4.4 cookie乱码

Cookie是小段的文本信息, 通过使用cookie可以标识用户身份、记录用户名和密码、跟踪重复用户。Cookie在服务器端生成并发给浏览器, 浏览器将cookie的key/value保存到某个指定的目录中, 服务器的名称与值可以由服务器端定义。cookie只能用来保存合法的ASCII字符, 如果要保存中文, 需要将中文转换成合法的ASCII字符, 否则就会产生乱码。其解决乱码的方法是在使用cookie的时候通过URLEncoder.encode (“中文值”, ”编码”) , 将中文转化为ASCII码之后再使用即可。

5 过滤器解决方案

过滤器主要用于过滤、拦截请求或响应信息, 可以在servlet或JSP页面运行之前和之后被自动调用。当客户端发出资源请求时, Web服务器可以根据应用程序的配置进行检查, 如果请求符合过滤条件, 则对客户的请求进行过滤或拦截, 进行相应的设置和修改, 如果不符合, 则放行。

无论采用哪种方式提交, 我们都可以通过String output=new String (request.getParameter ("input") .getBytes ("ISO-8859-1") [5], "utf-8") 这种方式来解码。利用该特性, 我们设计一个过滤器, 在过滤器中再设计一个内部类, 该类继承HttpServletRequestWrapper, 然后重写getParameter (String value) 方法, 在过滤器的dofilter方法中判断提交方式, 根据不同的提交方式设置相应的解码方式, 这样就可以采用一个过滤器解决各种提交方式中的中文解码问题。过滤器实现代码如下:

6结束语

在进行Java web开发的过程中, 在JSP页面中只要将charset、pageEncoding、过滤器中的编码都设置一致并支持中文编码, 此时无论以何种提交方式, 都可以解决中文乱码问题, 从而提高了开发效率, 降低了程序乱码的出现概率。

参考文献

[1]杨金花.JSP技术中文乱码的原因及解决方法[J].电子设计工程, 2011, 19 (1) :25-27.

[2]张言辉.J2EE平台下汉字乱码问题分析及解决[J].电脑知识与技术, 2010, 6 (12) :3019-3021.

[3]李响, 郝静静.Java Web开发中文乱码问题的研究与解决[J].电脑知识与技术, 2012, 8 (1) :62-63.

[4]仁平红.Java中文乱码问题研究[J].计算机技术与发展, 2013, 23 (3) :118-120.

[5]彭立.Tomcat环境下JSP中文乱码问题的解决[J].湖南第一师范学院学报, 2011, 11 (3) :128-132.

[6]杨玉婷, 康厚良.Web应用程序开发中的中文乱码问题讨论[J].重庆三峡学院学报, 2011, 27 (3) :60-64.

[7]李德平.对Java Web应用开发中的中文乱码问题的研究与解决[J].计算机与数字工程, 2012, 278 (12) :126-129.

[8]宋丽娜.基于JSP的Web开发中文乱码问题的研究与解决[J].电子技术, 2013, 11 (2) :5-7.

[9]习胜丰, 戴敏.Java Web中文乱码处理研究[J].湖南城市学院学报, 2010, 9 (19) :66-68.

乱码问题 第8篇

关键词:ASP.NET,传值,乱码

0 引言

在进行动态网页制作时, 如何进行Web页面间的数值传是很多程序员常要面对的问题。由于不同浏览器之间的差异, 在IE6和许多以IE6为内核的浏览器下, 页面间传递的参数 (汉字) 往往不能被正确显示, 目标页面常常因接收到错误的参数信息而导致程序运行失败以及各种异常的发生。

通过在实际项目中的开发经验, 以ASP.NET2.0中GridView控件为基础并结合AJAX技术, 提出了解决因页面间数据传递而产生的乱码问题的方法。

1 乱码产生的原因

ASP.NET2.0提供了多种方式来实现Web页之间的数值传递, 调用其中任何一种方式即可方便地实现页面间服务器端数据传递。当某页面的客户端向另一页面传递参数时, 通常首先需要调用System.Text命名空间下的UrlEncode函数对此参数进行编码, 接着调用ASP.NET2.0传值方法向目标页面传递编码后的参数。目标页面的服务器端在接收参数之前需调用System.Text命名空间下的UrlDecode函数进行解码, 从而得到正确的参数值。然而, 当上述的参数中包含汉字或者某些特殊符号时, 通过编码和解码的参数在IE6或者遨游2.5之前版本的多种浏览器环境下, 不能被正确解析, 此时便产生了乱码现象。

2 解决方法

乱码产生的原因是传递参数中存在的汉字等特殊字符在通过编码和解码后在某些浏览器下不能被正确显示, 可以从两个方面解决此问题。

2.1 使用最新版本的浏览器

使用IE7或者遨游2.5.2以上版本的浏览器, 在通常情况下可以避免乱码问题的发生。许多程序员因此要求用户使用最新版本的浏览器以正确显示信息。但这样设计出的程序往往对应用环境要求高, 可复用性差, 不能满足用户的实际需求, 因此不推荐这种方式, 本文将详细讨论另一种解决方法。

2.2 转换传递参数

当传递参数中包含汉字或者特殊字符时, 通过将传递参数转换为可被正确解析的参数 (如用字母、数字组合代替等) 或者传递原参数同条数据的其他可标识字段, 在目标页面再间接将其他字段转换为原参数。本文正是这种思想, 分别从客户端和服务器端的角度来间接地实现传递参数转换问题, 从根本上解决了乱码问题。

(1) 使用ASP.NET2.0中数据控件来绑定数据表中所有字段 (包括不需要在客户端显示的ID字段列) , 在客户端将对应列隐藏, 以正确显示必要的数据。将转换数据直接传递到目标页面, 目标页面通过数据查询的方式间接访问转换数据获得对应的原参数信息。

在以下的代码中, 设原始页面为source.aspx。原始页面中需显示各种车辆的信息, 点击编辑按钮将向目标页面传递TypeName, name, bianhao参数, 目标页面将根据这些参数来加载对应的页面进行编辑等操作。name中包含汉字, 不能被正确解析, 以下实例将传递的三个参数转换为能够标识name, bianhao字段的对应的ID字段。

source.aspx中代码如下:

在目标页面中添加如下代码:

在source.aspx中, GredView控件与数据库车辆信息表中的字段绑定代码被省略, OpenPage函数主要是根据TypeName (车辆类型) , 调用对应的页面, 并将ID值传递到对应页面中。source.aspx.cs中代码主要是将ID属性隐藏 (ID字段对应列表中第一列) , 在客户端不显示ID信息。

(2) 随着ASP.NET2.0的完善和AJAX技术的发展, 在动态网页设计中, Web服务器端和客户端之间的交互愈加便捷。可以利用AJAX技术轻松地实现客户端和Web服务器端的数据交互, 避免页面频繁刷新而导致的服务器端和客户端因数据频繁加载而带来的服务器负载过重的问题, 节约资源利用率。ASP.NET2.0中, 客户端必须通过特殊的方式才能调用服务器端的函数。下面的代码中, 利用AJAX技术, 客户端调用服务器端GetID函数, 将name、bianhao参数转换为可被正确解析的ID字段。

source.aspx中代码如下:

目标页面代码如 (1) 中目标页面代码。

3 两种方法的比较

以上两种方法都可以实现将数据转换为可以被浏览器解析的字符, 解决因跨页面传值带来的乱码问题。比较而言, 第一种方法比较方便简捷, 仅调用客户端的函数, 利用控件自身属性或者HTML中元素的样式属性即可完成预期效果, 避免了客户端和服务器端数据交互, 运行效率较高, 但客户端实现效果在不同的分辨率的显示器上差异很大。第二种实现方法使用异步的方式与服务器进行通讯, 在不同分辨率的显示器上显示的效果相差不大, 给用户的体验比较好, 配合一些其他AJAX控件可以避免页面的频繁刷新现象。但是AJAX代码编写复杂, 容易出错, 且有较大代码冗余。AJAX逻辑对客户端的安全扫描技术隐藏起来, 允许黑客从远端服务器上建立新的攻击, 难以避免一些已知的安全弱点, 诸如跨站点脚步攻击、SQL注入攻击的安全漏洞等。

4 结束语

本文的核心思想是通过将传递参数转换为浏览器可解析的参数来解决Web页面间传值产生的乱码问题。在Web开发中, 经常要考虑到程序的功能的易用性, 服务器的运行效率以及程序的安全性。因此, 如何选择合适的方法来解决参数转换是开发人员常要慎重考虑的问题, 本文以ASP.NET2.0控件为基础结合DHTML (HTML, CSS, JAVASCRIPT) , AJAX技术提供了两种思路, 有助于遇到实际问题时, 能够根据具体需求采用恰当策略, 提高Web程序的质量和效率。

参考文献

[1]陈启祥, 左强.ASRNET页面问传值方法研究[J].计算机工程, 2006, 12 (8) :113-114.

[2]熊凯, 匡桂娟.ASP.NET2.0页面传值方法探析[J].电脑知识与技术, 2007, 9 (20) :353-354.

[3]李文剑.ASP.NET跨页面传值方法集锦[J].MSDN开发精选, 2005, 5:41-42.

[4][美]Stephen Walther.ASP.NET2.0揭秘[M].北京:人民邮电出版社, 2007.

[5][英]Jeremy Keith.JavaScript DOM编程艺术[M].北京:人民邮电出版社, 2007.

[6]Bill Evjen, Srinivasa Devin Rader.Professional ASP.NET2.0[M].USA:Wiley, John&Sons, Incorporated, 2005.

[7][美]Scott Mitchell.ASP.NET2.0入门经典[M].北京:人民邮电出版社, 2007.

[8]Microsoft Corporation.MSDN Library-Visual Studio 2005[N].2005.

[9]刘爽.利用ASP.NET中ADO.NET技术实现数据库的动态访问[J].电脑知识与技术, 2005.

现代主义的乱码 第9篇

关键词:现代艺术,新潮美术,后现代艺术,文化批判

在20世纪的中国, 现代艺术没有产生多少具独创性的有价值的思想, 只有各种各样的走马灯似的“思潮”。这不是艺术界的单个现象, 整个人文领域普遍存在这个问题 (这个世界可以没有弗洛伊德的心理分析学说, 但是不能没有抗拒某种“思潮”泛滥的能力, 任何“思潮”的泛滥都会借助传播媒介凝聚成一股粉碎独立思想和个人创见的势力, 这个世界也真正成为了尼采宣扬的“即使没有上帝也要创造一个上帝”的自我强迫意志中) 。但“思潮”注定是推演不出思想的, 85新潮的意义仅在于引起了中国美术的多元倾向的发生, 并且它更带有病理性的精神特征, 它把西方现代艺术不同流派的历史性替代变成了不同群体的共时性纷争。新潮美术作为一种远距离的文化批判, 过于依赖观念, 蔑视传统, 忽略了艺术对现实的观照和对艺术本体的潜心研究。所谓的文化批判性也不过是画家对自己心态给予直接记录而已, 而现代主义渐成一种装饰性和自我炫耀。80年代普遍的社会现实和文化背景还远未到自然产生观念的时候, 因此, 当时的许多观念都是人为造出来的。“观念的东西已经令人厌倦, 艺术家应该回到自己确切的并不夸张的生活中 (王华祥) 。”

西方后现代艺术思潮的中国变体在当代中国文化中得以生长的第一层原因是“文革”对人性的空前破坏遗留下的社会病态心理, 即对权威主义、崇拜意识, 甚至人性、公德的普遍怀疑。我们知道, 在那场运动的初始, 人们是怀着异常纯洁、美好的愿望投入其中的, 坚信经过这场斗争能够建立起一个更加健康进步的社会。政治权威主义和生活中的正义、善良、信任曾是半个世纪以来中国人的全部精神支撑, 一场“文革”使它们轰然坍塌, 由此引发的精神危机不亚于西方的“上帝死了”。肉体的创伤容易治愈, 正如社会经济在短时期内就得以恢复和发展;而心灵伤口的弥合却不可能一蹴而就, 一个民族精神, 信仰的重建决非一朝一夕之功。尽管在拨乱反正期间, 对“文革”中的错误曾进行了全民的认真检讨和清理, 文艺领域的伤痕文学、寻根文学出现, 但事实证明, 在那以后乃至今后相当长的一个历史时期内, “文革”留给人们的精神创伤都会时常隐隐作痛。经历了这样一场灾难, 人们对“人性”产生了普遍的失望和怀疑, 对权威、信念、正义和公德常存了戒备心理, 这是后现代思潮的中国变体得以生长的第一层社会文化心理原因。整个80年代, 我们看到的是一幅颇类新文化运动的文化求索画卷。人们渴求精神重建和文化新生, 在自我否定之后自然将目光投向西方。特别是从80年代中期始, 几乎每一种西方思潮的译介都会引起一阵热烈追随的狂潮。表见在艺术领域, 是各种西方现代派艺术手段和技巧的学习、演用:先锋派诗歌、小说如雨后春笋, “新潮美术运动”更在85至86年形成一个高潮。在这一时期的艺术活动中, 艺术本体的建设还处于次要地位, 它努力承担着的是非艺术所能独力承担的文化批判和建构的使命:“首要的是震撼人的心灵, 而不是愉悦人的眼睛”。在这里, 激昂的情感, 对未来和新生的渴望和信心成为主旋, 当然其中也夹杂着在急躁心理驱使下的过激思想和言行。由于在西学的同时忽视了对传统文化的挖掘和整理, 忽视了传统文化在社会心理中仍占有的重要地位, 同时也由于政治权力意志对文化的控制依然强大, 这一场现代启蒙运动和民族精神的重建运动到80年末嘎然而止, 未能达到其重塑民族信仰和精魂的预期目标。 新时期的现代启蒙运动未能完成使命, 却在一个较短的时期内极大地拓展了人们的视野, 活跃了人们的思维, 对传统文化的冲击是巨大的, 这为后新时期多元化、边缘化思维倾向的出现埋下了伏笔。另一方面, 这场启蒙运动的失败尽管在今天看来有其必然性, 但客观上却造成了人们信仰、追求中的又一次失落。

艺术与社会的关系从来都是若即若离, 艺术不能以其始终的“革命性”来体现艺术本质, 咋咋呼呼的颠覆性话语和艺术行为在今天只能被理解为违背社会公义的破坏力, 是哗众取宠, 是艺术家人道秉性的一种丧失。作为精神的产物, 艺术不能始终如一地“革命”, 更不能无休止的献媚。89后艺术和新潮美术则有显然的区别, 首先它的沉潜状态即是一种淘汰。89以后更多的艺术家意识到自身语言的窘迫大于生存处境的窘迫, 这必然淘汰了一大批在艺术上无法具有穿透力的新潮画家。使那些只想一蹴而就、只想随波逐流、只想利用艺术的人自然远去, 因为它已不可能再像新潮美术那样去推举靠宣言和主义取得轰动效应的弄潮儿。“89后艺术”只承认那些不避孤独、潜心创作、有大批作品并相当成熟的现代艺术家, 他们不是急功近利者, 而是为了艺术的未来守得住寂寞的人。

“先锋作为一种精神, 如果它是个人的、内心的, 就是可贵的, 而如果它是时代的、势力的、叫喊的, 尤其是用作打倒什么的, 它就是可疑、令人生厌的。今天, 标新立异已成为大多数被颂扬的艺术标尺。一味鼓励个性表现与新颖独创有时对自由倒是不利的, 它可能成为另一种专制, 同时它助长了艺术的投机行为, 助长了艺术家对于历史的忽视。在任何时代, 混子都对真正的创作者构成了压抑, 我们这一代人中是这样, 在上一代人中是同样, 真正的创作者彼此也心知肚明。我反对一切混子, 无论他是老的还是少的, 当然, 我是将其作为一种人生方式来反对的, 而不是反对哪个人 (彭德) 。”

虽然现代艺术触及了人生的部分真实, 特别是包含了不同文化间的互融、借鉴和宽容, 但现代艺术作为一种话语霸权在门户开放的中国对中国的艺术家也造成了一定的压迫。因为缺乏一种现代语言的手段可供我们表现东方的一些优秀的思考和对于世界的认识, 于是, 许多中国的艺术家只好用形式主义或观念主义的西方手法来嫁接, 或是借用西方现代主义的某些外壳图解和肢解晦涩的哲学理论, 寄寓自己软弱的神经质般的纯粹精神。某些“国产”现代艺术遭到否定和批判的另一个直接原因是:它们太简单了, 简单到了无法用学术智慧加以判断, 凭感觉下结论已足够了, 思想和思想的呈现均只显示出弱智的观念。恰如一个叫花子, 他连唱带跳不过是为讨几个钱, 无论给与不给, 都没必要从表演专业的角度去判断他的歌唱和舞蹈水平。

艺术家永远是以自说自话的方式冲着世界说闲话, 这大约就是艺术家的“特权”与“合理性”吧。开明的时代, 开放的时代, 时常回停下来听听艺术家无对象的叫嚣。假如没有这些“画面”的出现, 我们便没有机会看到我们时代的虚荣, 拜物主义以及追求表层事物而放弃灵性的诸种病态。

所以, 起源于近代西方工业革命后的现代主义以及伴随着信息社会产生而产生的后现代艺术在中国的这个舞台上, 如果没有结合具体的民族性而演化, 只能是无病呻吟的错位, 没有未来。只有从思想的源头, 即中华文明的源头, 寻索和现代主义美学的结合, 才是一条可以持久发展的道路。

参考文献

[1]朱琦.香港现代艺术思潮的传播与发展.美术观察, 2002, (08) .

[2]唐济川.现代艺术设计思潮.中国轻工业出版社.

乱码问题范文

乱码问题范文(精选9篇)乱码问题 第1篇1 先要了解字符集概念字符集就是一套字符和编码,在存取页面字符时,是将字符集变成编码形式进行...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部