--CharToByteConverter会自动用调用gb2312的converter,把str转化 --成byte输入到FileOutputStream中,于是0xC4,0xE3放进了文件。 --但是如果是在英文平台下,CharToByteConverter的缺省值是8859_1, --FileWriter会自动调用8859_1去转化str,但是他无法解释,因此他会 --输出"?" ---- --2. 在英文平台上编译后,其实str在运行态的char[]是0x00C4 0x00E3, ---- --在中文平台上运行,中文无法识别,因此会出现?? -- 在英文平台上,0x00C4-->0xC4,0x00E3->0xE3,因此0xC4,0xE3被放进了 --文件 ---- 1.对于JSP正文的解释: --Tomcat首先看一下你的叶面中有没有"<%@page include的符号。有,则在相同 --地方设定response.setContentType(..);按照encoding的来读,没有他按照8859_1 --读取文件,然后用UTF-8写成.java文件,然后用sun.tools.Main去读取这个文件, --(当然它使用UTF-8去读),然后编译成class文件 --setContentType改变的是out的属性,out变量缺省的encoding是8859_1
2.对Parameter的解释 --很不幸Parameter只有ISO8859_1的解释,这个质料可以在servlet的实现代码中找到。
3.对include的解释 格式的,但是很不幸,由于那个写"org.apache.jasper.compiler.Parser"的人 在数组JspUtil.ValidAttribute[]忘记加了一个参数:encoding,因此导致不支 持这种方式。你完全可以编译源代码,加上对encoding的支持
总结:
如果你在NT底下,最简单的方法就是欺骗java,不加任何Encoding变量: 你好<%=request.getParameter("value")%>
http://localhost/test/test.jsp?value=你
结果:你好你
但这种方法局限性较大,比如对上传的文章分段,这样的做法是死定的,最好的 解决方案是用这种方案: <%@ page contentType="text/html;charset=gb2312" %> 你好<%=new String(request.getParameter("value").getBytes("8859_1"),"gb2312")%> |