关于动作的字符编码URLDecoder

时间:2012-07-24 18:29:56

标签: java arrays jsp tomcat character-encoding

我正在尝试修复字符编码问题。我意识到这不是一个很好的方法,但目前我只是打包它,当字符编码出现在新的待办事项列表中时,我会带来一个合适的解决方案。

无论如何,我现在通过在动作中执行此操作来修复法语字符的字符编码问题:

String folderName = request.getParameter(PK_FOLDER_NAME);
if (response.getCharacterEncoding().equals("ISO-8859-1") && folderName != null) {
            folderName = URLDecoder.decode(new String(folderName.getBytes("ISO-8859-1"), "UTF-8"), "UTF-8");
        }

然而字符串是什么?我该怎么办? 例如,如果字符串是这样的话:

String[] memos = request.getParameterValues(PK_MEMO);

我如何使用URLDecoder进行转换?

2 个答案:

答案 0 :(得分:2)

谢谢你们......

我正在寻找的答案就是这个(有效):

if (response.getCharacterEncoding().equals("ISO-8859-1") && memos != null) {
        for(int n=0; n< memos.length; n++) {
            memos[n] = URLDecoder.decode(new String(memos[n].getBytes("ISO-8859-1"), "UTF-8"), "UTF-8");
        }   
    }

答案 1 :(得分:1)

你的方式完全是错误的。

您首先获取请求参数(因此它开始被解析,这使得为请求参数解析设置正确的编码为时已晚!)并且您正在确定响应的编码而不是请求。这毫无意义。

只需在获取第一个参数之前设置请求编码。然后在第一次解析请求参数时使用它。

request.setCharacterEncoding("UTF-8");
String folderName = request.getParameter(PK_FOLDER_NAME);
String[] memos = request.getParameterValues(PK_MEMO);
// ...

请注意,您通常希望在servlet filter中调用request.setCharacterEncoding("UTF-8"),这样就不需要在webapp的所有servlet上重复它。

响应编码通常在JSP端由@page pageEncoding基于每个JSP配置,或者<page-encoding>web.xml中在应用程序范围内配置。

不要试图引入绷带/变通办法,只会让事情变得更糟。从一开始就以正确的方式做到。

另见: