문제

이미지 URL을 읽으려고합니다. Java 문서에서 언급했듯이 URL을 URI로 변환하려고 시도했습니다.

String imageURL = "http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg";
URL url = new URL(imageURL);
url = new URI(url.getProtocol(), url.getHost(), url.getFile(), null).toURL();  
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();

파일에 대한 java.io.filenotfound 예외를 얻습니다http://www.shefinds.com/files/christian-louboutin-dã© Colleté -100-pumps.jpg

내가 무엇을 잘못 하고이 URL을 인코딩하는 올바른 방법은 무엇입니까?

업데이트:
RSS 피드에서 읽기 위해 로마를 사용하고 있습니다. Balusc의 제안을받는 것은 다른 단계에서 원시 입력을 인쇄했으며 Rome RSS Parser가 UTF-8 대신 ISO-8859-1을 사용하는 것처럼 보입니다.

도움이 되었습니까?

해결책

여기서 잘 작동합니다 (403을 반환합니다. 적어도 404가 아닙니다) :

URL url = new URL("http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg");
URLConnection connection = url.openConnection();
InputStream input = connection.getInputStream();

403을 반환하지 않도록 수정하면 사진이 올바르게 퇴직합니다.

URL url = new URL("http://www.shefinds.com/files/Christian-Louboutin-Décolleté-100-pumps.jpg");
URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/4.0");
InputStream input = connection.getInputStream();
OutputStream output = new FileOutputStream("/pic.jpg");
for (int data = 0; (data = input.read()) != -1;) {
    output.write(data));
}

그래서 당신의 문제는 다른 곳에 있습니다. 변환은 실제로 필요하지 않습니다. 초기 URL이 유효합니다.

잘못된 문자 인코딩을 사용하여 일부 바이너리 소스에서 실제 URL을 얻을 수 있습니까? 전환 é 에게 é 즉, 원래 소스가 UTF-8 인코딩되었으며 코드가 UTF-8 대신 ISO-8859-1을 사용하여 코드를 잘못 읽었 음을 시사합니다.

업데이트: 또는 실제로 Java 소스 코드에서 하드 코딩하고 잘못된 인코딩을 사용하여 소스 파일 자체를 저장했을 수도 있습니다. UTF-8을 사용하여 파일을 저장하도록 편집기 (Eclipse)를 구성했습니다. -Dfile.encoding UTF-8에도 기본값이 표시되므로 이유를 설명합니다. 내 기계에서 작동합니다 ;)

업데이트 2: 주석에 따라 간단히 말해서 소스 파일을 저장하는 데 사용 된 인코딩이 기본값과 일치하면 모든 것이 잘 작동합니다. -Dfile.encoding 런타임 플랫폼 (및 해당 인코딩이 é). 코드를 배포하고 싶을 때마다 예상치 못한 충돌을 피하려면 유니 코드 이스케이프로 하드 코딩 된 비 ASCII 숯을 교체하는 것이 좋습니다.

다른 팁

기술적 인 대답은 "당신은 할 수 없습니다"라고 생각합니다. 비 ASCII 문자는 표준에 따라 URL에서 사용할 수 없으며 일부 ASCII 문자조차도 "%XX"구문으로 빠져 나와야합니다. 여기서 XX는 문자의 ASCII 값입니다.

무엇이든, '%e9'로 'é'를 탈출 할 수는 있지만 이것은 ISO-8859-1에 따라 이것을 문자의 인코딩으로 해석하는 서버에 의존합니다. 이것이 기술적으로 허용되지는 않지만 많은 서버가 그렇게 할 것이라고 생각합니다.

소스 파일의 인코딩은 비난입니다. IDE를 사용하여 UTF-8로 설정 한 다음 URL을 기소하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top