2013-08-24 3 views
3

이 코드 스텁이 제공자바에서는 URLEncode는 다른 결과

p=指甲油 
p=%E6%8C%87%E7%94%B2%E6%B2%B9 

을하지만 명령 줄에서 동일한 코드를 실행할 때, 나는 다음과 같은 수 출력 :

p=指甲油 
p=%C3%8A%C3%A5%C3%A1%C3%81%C3%AE%E2%89%A4%C3%8A%E2%89%A4%CF%80 

무엇이 문제 일 수 있습니까?

+2

이 코드에 'value'가 어떻게 전달됩니까? – MattR

+0

결과를 재현 할 수 없습니다. 난 그냥 Eclipse에서와 같은 명령 줄에서 동일한 출력을 얻을. –

+0

플랫폼 관련 문제 일 수 있습니다. Mac에서 이런 일이 발생했기 때문입니다. 하지만 그것은 내 리눅스 박스에서 발생하지 않습니다. – Arun

답변

9

Mac에서 터미널에서 Mac OS 로마 인코딩을 사용하고있었습니다. 이러한 한자는 Java로 보내기 전에 UTF-8 인코딩 대신 Mac OS 로마 인코딩을 사용하여 잘못 해석됩니다. 증거

는 그 한자 바이트 이하의 (16 진수)의 UTF-8 인코딩 존재한다

그런 다음 Mac OS Roman codepage layout을 확인하십시오. 그 (16 진수) 바이트는 th 전자 다음과 같은 문자 :

  • 0xE6 0x8C에는 0x87 = Êåá
  • 0xE7 0x94 0xB2 = Áî
  • 0xE6 0xB2 0xB9 = Êπ
이제

함께 넣어 및 URL UTF-8을 사용하여 인코딩하십시오.

System.out.println(URLEncoder.encode("指甲油", "UTF-8")); 

인쇄물을 확인하십시오. %C3%8A%C3%A5%C3%A1%C3%81%C3%AE%E2%89%A4%C3%8A%E2%89%A4%CF%80

터미널에서 UTF-8 인코딩을 사용하는 Mac을 말해, 당신의 문제를 해결하려면. 솔직히, 나는 맥을하지 않기 때문에 머리 부분에서 그 부분에 대답 할 수 없다. 이클립스 인코딩 설정은 완벽하지만, 경우에 따라 창> 환경 설정> 일반> 작업 공간> 텍스트 파일 인코딩을 통해 구성 할 수 있습니다.


업데이트는 :

이 변수가 대신 텍스트 파일에서 발생하는 경우 내가

텍스트 파일에서 값을 읽고있다 : 나는 코멘트를 놓친 명령 줄 입력 —에서 처음에 —을 예상 했으므로 문제를 다르게 해결해야합니다. 분명히, 당신과 같이 런타임 환경의 디폴트의 문자 인코딩을 사용하는 것을위한 Reader 구현을 사용했다 :

Reader reader = new FileReader("/file.txt"); 
// ... 

는 대신 독자를 만들 때 명시 적으로 원하는 인코딩을 지정해야합니다. InputStreamReader 생성자를 사용하면됩니다.

Reader reader = new InputStreamReader(new FileInputStream("/file.txt"), "UTF-8"); 
// ... 

이 명시 적으로 UTF-8 대신 Charset#defaultCharset()하여 사용할 수와 같은 런타임 환경의 기본 인코딩을 사용하여 /file.txt을 읽을 자바를 말할 것이다.

System.out.println("This runtime environment uses as default charset " + Charset.defaultCharset()); 
+0

감사합니다. – Arun

+0

당신을 진심으로 환영합니다. – BalusC

관련 문제