java 编码URL中的空格,中文

本文介绍了解决Java中使用java.net.URL进行网络连接时遇到的URL包含中文和特殊字符导致解析失败的问题。通过自定义编码函数对URL进行转码,确保能够正确地从服务器获取资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.net.URL进行网络连接的时候,如果url中包含中文,空格、花括号的时候,这时候java无法解析。具体请看 HttpGet\HttpPost 参数uri注意点


这个时候怎么办呢??现在android项目里面有图片的异步加载,代码如下:

@Override
		public void run() {
			try {
				InputStream is = new URL(url).openStream();
				Bitmap bitmap = BitmapFactory.decodeStream(is);
				is.close();

				boolean writesuccess = writeBitmapToFile(bitmap, url);

				if (writesuccess) {
					Message msg = new Message();
					msg.what = GET_IMAGE_SUCESS;
					msg.obj = bitmap;
					handler.sendMessage(msg);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

上面是在一个Thead的run方法里面异步获取图片。

但是实现过程中发现很多服务端能显示的图片到android客户端无法显示,后来发现时url中包含了空格,中文等之类的东西,导致无法解析。

那为什么浏览器上面可以解析呢?原来浏览器将url重新编码了,它将空格、中文等之类的特殊字符重新编码为其他字符。

那我们的java程序里面怎么实现呢??

代码:

private static String zhPattern = "[\\u4e00-\\u9fa5]+";

	public static String encode(String str, String charset)
			throws UnsupportedEncodingException {
		str = str.replaceAll(" ", "+");// 对空字符串进行处理
		Pattern p = Pattern.compile(zhPattern);
		Matcher m = p.matcher(str);
		StringBuffer b = new StringBuffer();
		while (m.find()) {
			m.appendReplacement(b, URLEncoder.encode(m.group(0), charset));
		}
		m.appendTail(b);
		return b.toString();
	}

上面的函数是编码函数,这个可以编码空格和中文,但是后来发现不支持url中的中文括号。


现在我给出android中新的异步获取图片的代码:


@Override
		public void run() {
			try {
				String tempurl = encode(url, "utf-8");
				InputStream is = new URL(tempurl).openStream();
				Bitmap bitmap = BitmapFactory.decodeStream(is);
				is.close();

				boolean writesuccess = writeBitmapToFile(bitmap, url);

				if (writesuccess) {
					Message msg = new Message();
					msg.what = GET_IMAGE_SUCESS;
					msg.obj = bitmap;
					handler.sendMessage(msg);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

上面的代码先对url进行编码再连接远程服务器端获取图片。


如果哪位大牛知道支持中文括号的方法,希望一定要告诉我一下,先谢谢啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值