我想在图像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- DA ©colleté-100-pumps.jpg

我在做什么错的,什么是编码该URL的正确方法?

更新:结果 我使用的是罗马阅读RSS提要。服用从BalusC我已经从不同阶段打印出原始输入和好像该ROME RSS解析器使用ISO-8859-1代替UTF-8的建议。

有帮助吗?

解决方案

作品细这里(返回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,画面被正确retireved:

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编码和在使用ISO-8859-1代替UTF-8的代码错误地读入。

更新:也许你已经在Java源代码实际上是硬编码,并使用了错误的编码保存源文件本身。我已经配置了我的编辑器(Eclipse中)使用UTF-8来保存文件和-Dfile.encoding也被默认为UTF-8,这将解释为什么的它的工作原理在我的机器的;)

更新2 :根据意见,概括地说,一切都应该正常工作,如果用来保存源文件的编码运行时平台的默认-Dfile.encoding(和有问题的字符编码匹配支持é)。为了避免这些意外的冲突,只要你喜欢分发代码,它确实更好用Unicode转义字符来代替硬编码的非ASCII字符。

其他提示

我觉得技术答案是“你不能。”非ASCII字符不能在URL根据标准被使用,甚至有些ASCII字符必须以“%XX”的语法,其中XX是字符的ASCII值被转义。

如果有的话,可以躲过“E”与“%E9”但这依赖于服务器解释本作为根据ISO-8859-1的字符的编码上。虽然这不是技术上允许,我相信许多服务器将做到这一点。

源文件的编码是罪魁祸首。使用IDE,它设置为UTF-8,然后repaste的URL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top