1

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

无论如何,目前我已经通过在操作中执行此操作解决了法语字符的字符编码问题:

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 进行转换?

4

2 回答 2

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");
        }   
    }
于 2012-08-09T20:14:53.353 回答
1

你正在以完全错误的方式去做。

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

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

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

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

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

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

也可以看看:

于 2012-07-25T02:14:16.583 回答