原帖地址:http://hi.baidu.com/huqiwen/blog/item/c709aa18fa187a0135fa4103.html
本文主要探讨中文乱码的解决方法,在Fckeditor For Java中的中文乱码主要有三个方面:
一、中文图片上传后文件名显示为乱码的情况
二、创建目录时中文为乱码的情况
三、当引用的图片为中文时,在页面中显示为红叉的情况
这种乱码情况,就我目前的感觉而言是Fckeditor的Bug,不是我们有没有配置正确的问题了,要想解决以上三个问题,需要我们修改Fckeditor的源码。
对于问题1和2我们可以把它用一个方法解决掉,使用UUID(此类位于java.util.UUID,不明白的可以查API)解决掉此问题。思路是把这些上传上来的中文名字进行随机重命名英文字符串,这样就不存在中文问题了。
由于我们无法直接修改FckEditor,所以需要我们重写ConnectorServlet这个Servlet文件,我们在我们的项目里面新建一个Class文件,命名为ConnectorServlet,直接把net.fckeditor.connector.ConnectorServlet的内容copy过来。另外需要修改web.xml文件把servlet的指向定位到我们自己重写的Servlet
假如我们把我们新建的ConnectorServlet放在包test.fckeditor下面,则WEB.XML需要把:
<servlet-class>
net.fckeditor.connector.ConnectorServlet
</servlet-class>
改成
<servlet-class>
test.fckeditor.ConnectorServlet
</servlet-class>
其他保持不变就即可!
在我们copy后会出现一个报错,说是Messages这个找不到,我们使用Eclipse的修复功能导入net.fckeditor.connector.Messages这个包就可以了。
下面我们开始修改这个Servlet,解决我们上述的三个中文乱码问题。
第一个问题:找到doPost方法中的try...catch语句块。在try前面增加这么一行语句:
upload.setHeaderEncoding("UTF-8");
在这里我们对于这个upload进行编码,解决中文问题。到这里对于项目进行重新布署就会发现再上传中文名字的图片就不会显示为乱码了。
第二个问题:找到doGet方法中的
String newFolderStr = UtilsFile.sanitizeFolderName(request
.getParameter("NewFolderName"));
修改为:
String tempStr = request.getParameter("NewFolderName");
tempStr = new String(tempStr.getBytes("iso8859-1"),"utf-8");
String newFolderStr = UtilsFile.sanitizeFolderName(tempStr);
在原来的代码中没有对rerquest的数据进行重新编码,所以遇到中文就会出现乱码!
第三个问题:其实有两种解决方法,一是修改服务器的URL编码,但是修改服务器的话,在我们自己的电脑上比较方便,如果是我们要放到自己买的空间中就不容易了。另外如果修改了服务器的编码,可能影响到其它项目。所以这种方法就不写了
二是我们使用UUID对上传的文件进行重命名成英文字条串。
找到doPost中的try语句块中的第一个if 即:
if (!ExtensionsHandler.isAllowed(resourceType, extension))
ur = new UploadResponse(UploadResponse.SC_INVALID_EXTENSION);
在这段代码前面添加下面的一行语句:
filename = UUID.randomUUID().toString()+"."+extension; //extension为扩展名,在上文中得到的
这样我们的三个问题都解决了。如果我们做了第三步,那第一个修改也就没有什么作用了,所以使用的话,只进行二三步就OK了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hailang43/archive/2009/05/17/4194212.aspx