Java项目访问中文资源的解决方法
来源:互联网 发布:json 解析工具 代码 编辑:程序博客网 时间:2024/06/06 02:14
在项目中遇到这样的问题,客户的资源文件(比如XML)中有中文名,
而访问的时候,带中文名的URL报404.
比如:http://localhost:8080/ProjectTest/cms/版权.xml
在IE地址栏直接输入也不行。
解决方法:
1. 要让带中文名的文件在IE地址栏可以直接访问,跟代码是没关系的,要改Tomcat设置。
Tomcat\conf\server.xml:在8080端口最后添加URIEncoding="UTF-8"即可
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
2. 光是改了Tomcat,程序中还是访问不了,需要用URLEncoder.encode(string, "UTF-8")转码
DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("http://localhost:8080" + encodeUrlToUTF8(request.getParameter("xml")));
public static String encodeUrlToUTF8(String url) throws UnsupportedEncodingException{ StringBuffer sb = new StringBuffer(); for (int i = 0; i < url.length(); i++) { String s = url.substring(i, i + 1); byte[] bytes = s.getBytes("UTF-8"); // 中文字符是2个字节,符号和英文为1个字节 if (bytes.length == 1) { if (bytes[0] == ' ') sb.append("%20"); else sb.append(s); } else { sb.append(URLEncoder.encode(s, "UTF-8")); } } return sb.toString(); }
补充一下我对编码设置的理解:
Tomcat中的URLEncoding的默认值是ISO-8859-1(单字节编码),不能显示中文。它是用来设置URL解码时的字符编码。
如果资源里面有中文,则需要改成UTF-8或者GBK等类型。
Tomcat服务器既然设置了UTF-8的编码格式,则传给他的URL也必须是UTF-8格式,不然读不到。
一开始我以为web.xml中,有了下面的过滤器以后,会自动转换为UTF-8
提交给服务器的URL如下:
http://localhost:8080/ProjectTest/cms/%E7%89%88%E6%9D%83.xml
说明web.xml的过滤器起了作用。
但是从代码里面直接读取资源的时候
如果没有encodeUrlToUTF8手动转换为UTF-8的话,它直接会去读取服务器上http://localhost:8080/ProjectTest/cms/版权.xml这个文件,
Tomcat服务器以UTF-8来读取当然就读不到了。
所以web.xml中的设置对于代码读取文件似乎并不起作用,因此才需要手动在代码中转换。
如果资源里面有中文,则需要改成UTF-8或者GBK等类型。
Tomcat服务器既然设置了UTF-8的编码格式,则传给他的URL也必须是UTF-8格式,不然读不到。
一开始我以为web.xml中,有了下面的过滤器以后,会自动转换为UTF-8
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>事实证明,在IE地址栏里面输入http://localhost:8080/ProjectTest/cms/版权.xml,确实会自动转换为UTF-8。
提交给服务器的URL如下:
http://localhost:8080/ProjectTest/cms/%E7%89%88%E6%9D%83.xml
说明web.xml的过滤器起了作用。
但是从代码里面直接读取资源的时候
DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("http://localhost:8080" + encodeUrlToUTF8(request.getParameter("xml")));
如果没有encodeUrlToUTF8手动转换为UTF-8的话,它直接会去读取服务器上http://localhost:8080/ProjectTest/cms/版权.xml这个文件,
Tomcat服务器以UTF-8来读取当然就读不到了。
所以web.xml中的设置对于代码读取文件似乎并不起作用,因此才需要手动在代码中转换。
0 0
- Java项目访问中文资源的解决方法
- 关于Java WEB项目中中文乱码的解决方法
- CloudStack基于项目的资源访问控制
- android 项目中的res 资源 不能在R.java自动生成ID 的解决方法
- WEB项目tomcat容器下 java访问自定义的资源文件xml
- 自己总结线程并发的访问资源的解决方法
- web.xml里配置servlet,访问找不到资源的解决方法
- SpringMVC访问不到静态资源的几种解决方法!
- tomcat主页能访问,但项目不能访问的解决方法
- ubuntu下的eclipse打开windows下java项目中文乱码 解决方法
- centos下的eclipse打开windows下java项目中文乱码 解决方法
- java-资源的表示和访问
- Java Web中资源的访问路径
- Java:一些访问资源的技巧
- Java Web中资源的访问路径
- java和spring访问资源的方式
- java项目中.properties中文资源文件相关资料
- 解决java中文问题的一些资源
- Linux学习总结(15)——提高 Vim 和 Shell 效率的 9 个建议
- Android PopupWindow怎么合理控制弹出位置(showAtLocation)
- APP三种开发模式--及---HybridApp解决方案_No1_混合模式(Hybrid)App开发概述
- PopupWindow 无法消失背后的真相(setBackgroundDrawable(Drawable background))
- Android Toast cancel和show深入浅出实战
- Java项目访问中文资源的解决方法
- HandlerThread 创建一个异步的后台线程
- MVC+Easyui+EF datagrid内容分页(2)
- Android 源码下载方法(Git 方式clone)
- Android来电监听和去电监听
- Node——Buffer
- shell脚本的函数、加法的使用实例
- Linux配置JDK环境变量
- QT UDP网络编程