中文乱码问题
1、以post方式提交由中文字符的表单
在调用request.getParameter("")前,先调用request.setCharacterEncoding("GBK"),明确指出
编码方式,在向浏览器输出前调用response.setContenType("text/html;charset=GBK");
<%@ page contentType="text/html;charset=GBK" %>
2、以get方式提交
此时需要自己转码:
String value = request.getParameter("name");
value= new String(value.getByte("ISO-8859-1"),"GBK");
3、在数据库中存储中文字符
数据库一般默认的编码方式是ISO-8859-1,所以在讲中文存入到数据前,先要自己转码,取出后在解码
4、Servlet/jsp
在jsp文件中<%@page pageEncoding="GBK" %>
<%@ page contentType="text/html;charset=GBK" %>
可以用过滤器解决乱码问题
让tomcat支持中文文件名
在conf/server.xml文件中,在<Connector>元素添加URLEncoding属性,并将其值设置为"UTF-8"
如果调用response.sendRedirect()到中文文件名的页面,需要
response.sendRedirect(java.net.URLEncoding.encode("员工信息.html","UTF-8"));
国际化和本地化
国际化只要由两个类完成:Locale和ResourceBundle
Locale(String language)
Locale(String language,String country)
为了简化Locale对象的构造,Locale类中定义了许多Locale对象常量
Locale.CANADA,Locale.CHINA(对应国家)Locale.CHINESE,Locale.ENGLISH(对应语言)
getDefault()获取本地默认的Locale对象
getAvailableLocales(),获取java支持的所有语言环境
资源包,必须扩展ResourcBundle
不同语言对应的资源包为名称的基名加上ISO-639标准的语言代码,如myresource_en
获取资源包,调用
public static final ResourceBundle getBundle(String baseName),使用默认的Locale获取资源包
public static final ResourceBundle getBundle(String baseName,Locale locale)
public static final String getString(String key)获取资源包中key对应的内容
ResourceBundle有两个派生类:ListResourceBundle和PropertyResourceBundle,
PropertyResourceBundle,我们不需要直接使用它。
可以用native2ascii
消息格式化
在资源文件中的消息文本可以带参数:
greeting={0},欢迎你
花括号中的数字为一个占位符,可以使用0~9的数字,所以消息文本中的参数最多有10个,替换占位符,
可以使用java.text.MessageFormat format();
greeting={0},欢迎你。今天是{1}
Locale l = Locale.getDefault();
ResourceBundle rb = ResourcBundle.getBundle("myResource",l);
String str = rb.getString("greeting");
String msg = MessageFormat.format(str,"zhangsan","new Date()");
format参数的顺序与占位符的数字对应