0

我有一个非常基本的测试失败了,我不知道为什么。

这是我的代码

System.out.println(URLEncoder.encode("去", "UTF-8")); // result = "%E5%8E%BB"
System.out.println(URLDecoder.decode("%E5%8E%BB", "UTF-8")); result = ?

为什么第二个 system.out 会导致 a ?我期待再次看到去。

为了增加更大的图景,我将在 javascript 中使用 encodeURIComponent() 将我的数据发布到我想在其中使用 URLDecoder.decode 的 servlet,但我什至无法让上面的示例工作。我错过了什么?

更新:刚刚注意到一些奇怪的事情,当我在 servlet 中运行代码时,我得到了我描述的结果,但是如果我只是在 main 方法中运行它,它就可以工作。这是我的 servlet 代码

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SaveFile extends BasicServiceServlet {
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,  IOException {
    //request.setCharacterEncoding("UTF-8"); 
    //response.setContentType("text/html; charset=UTF-8");  
    String DIR = getBaseUrl();

    String project = request.getParameter("project"); 
    String foldername = request.getParameter("foldername"); 
    String filename = request.getParameter("filename");
    String fileContent = (String)request.getParameter("content");
    String ch = (String)request.getParameter("char"); //char = 去
    String pathToFile = DIR + project + "/" + foldername + "/" + filename; 
    System.out.println(URLEncoder.encode("去", "UTF-8")); //reults in %E5%8E%BB
            System.out.println(URLDecoder.decode(ch, "UTF-8")); // results in ?
    System.out.println(URLDecoder.decode("%E5%8E%BB", "UTF-8")); //results in ?
    System.out.println("去".equals(URLDecoder.decode("%E5%8E%BB", "UTF-8"))); //this results in true

    try {
        //writing it to file results in ?
        BufferedWriter out = new BufferedWriter(new FileWriter(pathToFile));
        out.write(URLDecoder.decode(fileContent, "UTF-8"));
        out.close();
        System.out.println("STAT - SaveFile " + filename);
    }catch(IOException e){
        System.out.println("STAT - SaveFile Error");
    }
   }
 }

但是运行一个简单的主要方法对我有用

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

 public class test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        System.out.println(URLEncoder.encode("去", "UTF-8"));
        System.out.println(URLDecoder.decode("%E5%8E%BB", "UTF-8"));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}
4

3 回答 3

2

这只是您的控制台的显示问题。编码/解码工作正常,如您使用以下代码所见:

System.out.println("去".equals(URLDecoder.decode("%E5%8E%BB", "UTF-8"))); //displays "true"

- 编辑 -

您的 servlet 代码不起作用可能是因为您在构造编写器时没有指定字符编码,所以它使用默认编码。请改用以下内容:

new OutputStreamWriter(new FileOutputStream(pathToFile), "UTF-8");
于 2014-02-20T07:02:56.583 回答
0

您的代码中没有遗漏任何内容,也编译得很好。只需检查两件事: 1. 如果此代码像 JSP 一样进入网页,请确保charset&pageEncoding是 UTF-8 2. 检查您的项目属性并确保您的项目编码是 UTF-8,请参阅附件图片 在此处输入图像描述

于 2014-02-20T07:16:02.893 回答
0

首先,java文件必须正确编码。查看该文件的属性,并正确设置编码。

在 Properties 中,在 Resources 标记中将 Text File Encoding 设置为 UTF-8。

控制台输出使用为文件定义的编码。这就是你得到的原因

于 2014-02-20T07:07:58.177 回答