Tuesday, January 24, 2006

Hello Unicode ——JAVA的中文处理学习笔记
是应该根据客户端浏览器设置ServletRequest和ServletResponse用相应语言的编码方式进行输入解码/输入编码,当根据浏览器的头信息中的"Accept-Language"为zh-cn(中文)时,设置请求的解码方式和输出的字符集编码方式使用GBK:
        //auto detect broswer's languages
String clientLanguage = req.getHeader("Accept-Language");

//for Simplied Chinese
if ( clientLanguage.equals("zh-cn") ) {
req.setCharacterEncoding("GBK");
res.setContentType("text/html; charset=GBK");
}
可以把这个写在一个过滤器里,自动设置字符编码。

在Servlet的源代码中尽量不要有中文:因为在MVC模式中,Servlet主要是控制器(C)的角色,因此,应该通过ResourceBundle
机制由Servlet控制转向到相应的显示器(JSP或者XSLT)中,所以应该将与本地界面语言相关的界面显示的部分从Servlet和后台的模块中完
全剥离出来,放到相应的ResourceBundle文件中或者XSLT文件中。这样源程序里完全是英文,编译时完全不需要考虑字符集的问题。

如果Servlet实在需要包含中文,则需要设置应用服务器的Javac编译选项,加上-encoding选项成系统缺省的字符集,如果把用中文编写的字符按照英文方式解码编译,然后再按照英文方式输出,虽然结果表面正确,实际上都成了面向“字节”编程。

在Servlet层,应该像GOOGLE搜索引擎那样,设计成能够根据客户端浏览器的语言环境自适应输出,为了判断浏览器的语言Servlet中应该有类似以下的代码:
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//从HTTP请求的头信息中获取客户端的语言设置
String clientLanguage = req.getHeader("Accept-Language");

//简体中文浏览器
if ( clientLanguage.equals("zh-cn") ) {
req.setCharacterEncoding("GBK");
res.setContentType("text/html; charset=GBK");
}
//繁体中文浏览器
else if ( clientLanguage.equals("zh-tw") ) {
req.setCharacterEncoding("BIG5");
res.setContentType("text/html; charset=BIG5");
}
//日文浏览器
else if ( clientLanguage.equals("jp") ) {
req.setCharacterEncoding("SJIS");
res.setContentType("text/html; charset=SJIS");
}
//缺省认为是英文浏览器
else {
req.setCharacterEncoding("ISO-8859-1");
res.setContentType("text/html; charset=ISO-8859-1");
}
...
//设置好request的解码方式和response的编码方式后,进行后续的操作。
//比如再转向到HelloWorld.gbk.jsp HelloWorld.big5.jsp HelloWorld.jis.jsp等
}

Monday, January 23, 2006

解决中文问题:
方法1、
在server.xml檔中加上URIEncoding="UTF-8"

在編碼和解碼的地方,分別用UTF-8的編碼即可。
URLEncoder.encode(key,"UTF-8")
URLDecoder.decode(request.getParameter("key"),"UTF-8")

方法2、http://www.jdon.com/idea/chinesejava.htm
  1. 开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。
  2. 使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
    request.setCharacterEncoding("UTF-8")。
    网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
    需要配置web.xml 激活该Filter。
  3. 在JSP头部声明:charset= UTF-8" %。
  4. 在Jsp的html代码中,声明UTF-8:
  5. 设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
    jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
    一般数据库都可以通过管理设置设定UTF-8
  6. 其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等
其中有关数据库的也可以在入库时和出库时decode,由utf-8转换成8859-1(数据库默认编码).
解决中文问题:
方法1、
在server.xml檔中加上URIEncoding="UTF-8"

在編碼和解碼的地方,分別用UTF-8的編碼即可。
URLEncoder.encode(key,"UTF-8")
URLDecoder.decode(request.getParameter("key"),"UTF-8")

方法2、http://www.jdon.com/idea/chinesejava.htm
  1. 开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。
  2. 使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
    request.setCharacterEncoding("UTF-8")。
    网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
    需要配置web.xml 激活该Filter。
  3. 在JSP头部声明:charset= UTF-8" %>。
  4. 在Jsp的html代码中,声明UTF-8:
  5. 设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
    jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
    一般数据库都可以通过管理设置设定UTF-8
  6. 其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等
其中有关数据库的也可以在入库时和出库时decode,由utf-8转换成8859-1(数据库默认编码).
解决中文问题:
方法1、
在server.xml檔中加上URIEncoding="UTF-8"

在編碼和解碼的地方,分別用UTF-8的編碼即可。
URLEncoder.encode(key,"UTF-8")
URLDecoder.decode(request.getParameter("key"),"UTF-8")

方法2、http://www.jdon.com/idea/chinesejava.htm
  1. 开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。
  2. 使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
    request.setCharacterEncoding("UTF-8")。
    网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
    需要配置web.xml 激活该Filter。
  3. 在JSP头部声明:<%@ page contentType="text/html;charset= UTF-8" %>。
  4. 在Jsp的html代码中,声明UTF-8:
  5. 设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
    jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
    一般数据库都可以通过管理设置设定UTF-8
  6. 其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等
其中有关数据库的也可以在入库时和出库时decode,由utf-8转换成8859-1(数据库默认编码).
解决中文问题:
方法1、
在server.xml檔中加上URIEncoding="UTF-8"

在編碼和解碼的地方,分別用UTF-8的編碼即可。
URLEncoder.encode(key,"UTF-8")
URLDecoder.decode(request.getParameter("key"),"UTF-8")

方法2、http://www.jdon.com/idea/chinesejava.htm
  1. 开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。
  2. 使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
    request.setCharacterEncoding("UTF-8")。
    网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
    需要配置web.xml 激活该Filter。
  3. 在JSP头部声明:<%@ page contentType="text/html;charset= UTF-8" %>。
  4. 在Jsp的html代码中,声明UTF-8:
  5. 设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
    jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
    一般数据库都可以通过管理设置设定UTF-8
  6. 其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等
其中有关数据库的也可以在入库时和出库时decode,由utf-8转换成8859-1(数据库默认编码).
Java中文问题及最优解决方法 20050717:   

String encoding =
System.getProperty("file.encoding");
  System.out.println(encoding);
  }
}
在默认情况下:
先把源代码从操作系统默认编码转为unicode。然后编译,之后保存。
1、console直接执行的情况:
class执行时,输入自动由操作系统默认编码转为unicode,输出由unicode转为系统默认编码。

2、jsp和Servlet的情况不同:
客户传来的字符串(如表单)默认按照iso-8859-1编码接受并转为unicode,所有的输出也是按iso-8859-1格式传给浏览器。

3、与数据库交互:
默认的jdbc驱动程序,几乎都是按iso-8859-1与java程序交互。所以先把unicode转换,然后存到数据库。数据库默认俺iso-8859-1格式储存。

Wednesday, January 11, 2006

打造个人信息门户
除了rss,论坛也是可以订阅了,实现基于订阅的阅读,这个也是不错的想法。

Friday, January 06, 2006

测试啊

不叫Apache列出目录,改哪里?

RT


Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec