JSP文件中读取远程数据及url.openStream()不能识别中文报错

发布时间:2023年12月18日
		<% 
		URL url=new URL("http://localhost:8080/upload/markers.txt");
		InputStream inputStream=url.openStream();
		BufferedInputStream bis=new BufferedInputStream(inputStream);		
		ByteArrayOutputStream buf =new ByteArrayOutputStream();
		int result = bis.read();
		while(result != -1) {
		    buf.write((byte) result);
		    result = bis.read();
		}
		String str = buf.toString();
		System.out.println(str);
        %>

其中markers.txt为ANSI编码 :

当文件名中有中文字符时,可能会出现错误:

	new URL("http://localhost:8080/upload/test.txt").openStream();
	new URL("http://localhost:8080/upload/test无空格.txt").openStream();
	new URL("http://localhost:8080/upload/test 英文 中文空格.txt").openStream();

将以上地址在浏览器中打开,发现其请求网址是经过转码的:

如果将java中的地址换成转码后的请求网址,则不会出现异常(这里异常出现在含有空格的下一行上);

?因此在程序中需要将文件名转码(‘utf-8’),使其与浏览器中的转码一致:

	new URL("http://localhost:8080/upload/test.txt").openStream();
	//new URL("http://localhost:8080/upload/test无空格.txt").openStream();
	String encodedFile1=URLEncoder.encode("test无空格.txt", "utf-8");
	System.out.println("encodedFile1:	"+encodedFile1);
	new URL("http://localhost:8080/upload/"+encodedFile1).openStream();
	//new URL("http://localhost:8080/upload/test 英文 中文空格.txt").openStream();
	String encodedFile2=URLEncoder.encode("test 英文 中文空格.txt", "utf-8");
	System.out.println("encodedFile2:	"+encodedFile2);
	new URL("http://localhost:8080/upload/"+encodedFile2).openStream();

这里由于下一个文件名有空格的原因,又会报错?,再次在浏览器中查看:

这里空格被转换成了%20,而以上程序中的输出为+。若要不报错,需要在程序中转换后再把+替换为%20即可。若文件名中有+呢?测试发现,原有的+号会被转换为%2B,因此替换不会对其造成影响:

	String encodedFile2=URLEncoder.encode("test 英文 中文空格.txt", "utf-8").replace("+", "%20");
	System.out.println("encodedFile2:	"+encodedFile2);
	new URL("http://localhost:8080/upload/"+encodedFile2).openStream();
	String encodedFile3=URLEncoder.encode("test 英文 中文+空格.txt", "utf-8").replace("+", "%20");
	System.out.println("encodedFile3:	"+encodedFile3);

参考:

java new File 可以远程地址吗_mob649e816704bc的技术博客_51CTO博客

Java中InputStream和String之间的转换方法_inputstream转string-CSDN博客

踩坑系列]URLEncode 中对 空格的编码有 “+”和“%20”两种_%20 url-CSDN博客

文章来源:https://blog.csdn.net/csdndscs/article/details/135030701
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。