Java 操作上的字符编码

Java 操作上的字符编码,java,arrays,jsp,tomcat,character-encoding,Java,Arrays,Jsp,Tomcat,Character Encoding,我正在尝试修复一个字符编码问题。我意识到这并不是一个很好的解决方法,但目前我只是想把它包扎起来,当字符编码出现在一个新的任务列表中时,我会提出一个合适的解决方案 无论如何,目前我已通过在操作中执行以下操作修复了法语字符的字符编码问题: String folderName = request.getParameter(PK_FOLDER_NAME); if (response.getCharacterEncoding().equals("ISO-8859-1") && folder

我正在尝试修复一个字符编码问题。我意识到这并不是一个很好的解决方法,但目前我只是想把它包扎起来,当字符编码出现在一个新的任务列表中时,我会提出一个合适的解决方案

无论如何,目前我已通过在操作中执行以下操作修复了法语字符的字符编码问题:

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);

我如何使用URLDecover进行转换,而不是?

您的做法完全错误

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

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

request.setCharacterEncoding("UTF-8");
String folderName = request.getParameter(PK_FOLDER_NAME);
String[] memos = request.getParameterValues(PK_MEMO);
// ...
请注意,您通常希望在中调用
request.setCharacterEncoding(“UTF-8”)
,这样您就不需要在webapp的所有servlet上重复它

响应编码通常在JSP端根据每个JSP通过
@page pageEncoding
配置,或根据应用程序范围在
web.xml
中通过
配置

不要试图使用绷带/变通方法,这只会让事情变得更糟。从一开始就用正确的方法去做

另见:
    • 谢谢各位

      我一直在寻找的答案是(这是有效的):

      if(response.getCharacterEncoding().equals(“ISO-8859-1”)和&memos!=null){
      对于(int n=0;n
      getParameter()的结果已被URL解码。如果不了解有关环境、配置和确切问题症状的详细信息,就很难解决问题。至少,阅读“请参阅”链接后面的文章应该会带来很多见解。
      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");
              }   
          }