2014-02-20 10 views
0

나는 나에게 실패하는 아주 기본적인 테스트를 가지고 있는데 왜 그럴 수 없는지를 알아낼 수 없다. 여기Java URLDecoder가 반환합니까?

내 코드

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

왜 않는에서 두 번째로 System.out에 결과? 나는 다시 ____를보고 싶어합니다.

큰 그림을 추가하려면 자바 스크립트에서 encodeURIComponent()를 사용하여 URLDecoder.decode를 사용하려는 서블릿에 데이터를 게시하지만 위의 예제가 작동하지 않습니다. 내가 뭘 놓치고 있니?

업데이트 : 그냥 뭔가 이상한 것으로 나타났습니다. 서블릿에서 코드를 실행할 때 설명 된 결과가 표시되지만, 주된 방법으로 실행하면 작동합니다. 여기 내 서블릿 코드

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

그러나 간단한 main 메소드를 실행 그것은 콘솔의 디스플레이 문제 나

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(); 
    } 
} 
} 
+1

콘솔 출력 형식은 utf-8이어야합니다. 어떤 IDE를 사용하고 있습니까? – Rohan

+0

이클립스를 사용하고 있습니다. – ryuutatsuo

+1

파일에 글쓰기를 시도하고 편집기에서보고 있습니까? 콘솔이 UTF-8 인코딩을 사용하고 있지 않을 수 있습니다. – cosjav

답변

2

작동합니다. 당신이를 지정하지 않기 때문에

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

--edit--

서블릿 코드가 아마 작동하지 않습니다 : 다음 코드를 사용하여 볼 수 인코딩/디코딩, 잘 작동 작성자를 작성할 때 문자 인코딩이므로 기본 인코딩을 사용합니다. 대신 다음을 사용하십시오.

0

먼저 Java 파일을 올바르게 인코딩해야합니다. 해당 파일의 속성을보고 인코딩을 올바르게 설정하십시오.

속성의 Resources 태그에서 Text File Encoding을 UTF-8로 설정합니다.

콘솔 출력은 파일에 대해 정의 된 인코딩을 사용합니다. 그 이유가 인 이유가 무엇입니까?

0

코드에서 누락 된 것이 있으면 아무 것도 없습니다. 그냥이 일을 확인합니다 1. JSP와 같은 웹 페이지에이 코드는 다음 확인하면 charset & pageEncoding이 UTF-8 2. & 프로젝트의 인코딩이 UTF-8이 있는지 확인 프로젝트 속성을 확인하고, 첨부 파일을 참조 이미지 enter image description here