我有一个非常基本的测试失败了我,我无法弄清楚为什么。
这是我的代码
System.out.println(URLEncoder.encode("去", "UTF-8")); // result = "%E5%8E%BB"
System.out.println(URLDecoder.decode("%E5%8E%BB", "UTF-8")); result = ?
为什么第二个system.out导致了?我期待再看一遍。
要添加到更大的图片,我将在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();
}
}
}
答案 0 :(得分:2)
这只是控制台的显示问题。 编码/解码工作正常,您可以使用以下代码看到:
System.out.println("去".equals(URLDecoder.decode("%E5%8E%BB", "UTF-8"))); //displays "true"
<强> - 编辑 - 强>
您的servlet代码不起作用可能是因为您在构造编写器时未指定字符编码,因此它使用默认编码。请改用以下内容:
new OutputStreamWriter(new FileOutputStream(pathToFile), "UTF-8");
答案 1 :(得分:0)
首先必须正确编码java文件。查看该文件的属性,并正确设置编码。
在属性中,在资源标记中将文本文件编码设置为UTF-8。
控制台输出使用为文件定义的编码。这就是你得到?
的原因答案 2 :(得分:0)
您的代码中没有遗漏任何内容,也编译得很好。
检查两件事:
1.如果将此代码放入JSP页面,请确保charset
&amp; pageEncoding
是UTF-8
2.检查您的项目属性&amp;确保您的项目编码是UTF-8,请参阅附件图像