我正在尝试修复字符编码问题。我意识到这不是一个很好的方法,但目前我只是打包它,当字符编码出现在新的待办事项列表中时,我会带来一个合适的解决方案。
无论如何,我现在通过在动作中执行此操作来修复法语字符的字符编码问题:
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进行转换?
答案 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
中在应用程序范围内配置。
不要试图引入绷带/变通办法,只会让事情变得更糟。从一开始就以正确的方式做到。