分享
 
 
 

乱码问题之终极解决

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

多人 特别是新手 做j2ee 项目中

总能受困于 这样或那样的编码问题

这里讨论下 新手学习,高手指教 一起研究下

(以 tomcat mysql 做例子 我推荐所有的编码采用utf-8)

1 工程

工程内所有的 .java .jsp .xml .txt 都有默认的编码 默认的是系统环境的编码

我们中文系统通常是GBK 推荐都采用utf-8

utf-8 的时候 你编译 生成doc 可能会遇到乱码(特别是采用ant 的时候,生成doc你几乎100%会遇到)

解决方法 以ant 为例子

编译 注意 encoding 参数

<target name="build" >

<mkdir dir="${build.dir}" />

<javac encoding="utf-8" destdir="${build.dir}" target="1.3" debug="true" deprecation="false" optimize="false" failonerror="true">

<src path="${src.dir}" />

<classpath refid="master-classpath" />

</javac>

</target>

生成doc 注意 encoding 和 charset

<target name="doc">

<mkdir dir="doc" />

<javadoc charset="utf-8" encoding="utf-8" packagenames="${packages}" sourcepath="src" destdir="doc" author="true" version="true" use="true" splitindex="true" >

<classpath refid="master-classpath" />

</javadoc>

</target>

这里 的encoding 就是指的你 java 文件的编码格式 javac 和javadoc 都有这个参数

charset 指的是 生成 doc 后的编码方式 javadoc 的参数

2 数据库

mysql 的编码最复杂 从4以后 mysql 号称支持多编码 它更灵活了 我们也更麻烦了

mysql 有4个级别的编码

系统级

库级

表级

sql语句级

请保持采用统一的编码 推荐utf-8

其它数据库要简单的多 一般都是一种编码

3 web server

tomcat 为例

tomcat server.xml 中一个参数

<Connectorport="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" URIncoding="utf-8"/>

经测试 这个URIncoding 参数主要是 get 方法中采用编码

4 jsp 显示层

第1条中说明了 jsp 文件本身的格式

很多朋友采用eclipse +myeclipse 生成jsp

它自动生成一个头<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

不要误解 这句话不能保证你在ie里看到的不是乱码

pageEncoding它的意思是 这个页面本身采用的是 utf-8 (似乎只在eclipse 里有效果 ,我不确定)

为了在ie 里不乱码 你还得加一句 <%@ page contentType="text/html; charset=UTF-8"%>

它不能在(myeclispe)自动生成 推荐修改 myeclipse的模板 在下边的目录里

MyEclipse\eclipse\plugins\com.genuitec.eclipse.wizards_4.0.1\Templates

里边的jsp模版 你加上<%@ page contentType="text/html; charset=${encoding}"%>

5 filter

自从tomcat 4 以后 网上就流传了一个SetCharacterEncodingFilter 过滤器 搜一下有很多

很好用 web.xml 中加入

<filter>

?? <filter-name>Set Character Encoding</filter-name>

?? <filter-class>filters.SetCharacterEncodingFilter</filter-class>

?? <init-param>

?? <param-name>encoding</param-name>

?? <param-value>utf-8</param-value>

?? </init-param>

</filter>

?? <filter-mapping>

?? <filter-name>Set Character Encoding</filter-name>

?? <url-pattern>/*</url-pattern>

?? </filter-mapping>

6 资源文件

首先保证 文件本身是utf-8

然后部署的时候用 native2ascii 转换

这里给出 ant 里的例子

<native2ascii encoding="utf-8" dest="${web.dir}/WEB-INF/classes" src="${src.dir}" includes="**/*.properties" />

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有