访问带有中文路径的网络资源无法访问时需要转换编码

我们在浏览器访问网络资源时url路径默认是utf-8编码,但有时候我们的路径中带有中文,这时候我们直接在浏览器中键入中文路径是无效的。这个时候我们就需要将路径转换为gb2312的编码。比如我要访问“你好.txt”文件,直接在url敲入http://192.168.1.153:8080/math/resources/你好.txt

则出去的浏览器自动将这个url格式转换为(utf-8):/math/resources/%E4%BD%A0%E5%A5%BD.txt     

此时需要我们手动转换成gb2312编码的urlOK

http://192.168.1.200:8080/MathGenius/resources/%c4%e3%ba%c3.txt

服务端接收时也是以gb2312的编码格式接受,然后反转回来就好。

以下是将url转成gb2312的编码代码:

public static String encodeUrlToGB2312(String url)
			throws UnsupportedEncodingException {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < url.length(); i++) {
			String s = url.substring(i, i + 1);
			byte[] bytes = s.getBytes("gb2312");
			if (bytes.length == 1) { // 如果为一个字节则直接加入StringBuffer(中文至少为两个字节,一个字节不可能为中文)
				if (bytes[0] == ' ')
					sb.append("%20");
				else
					sb.append(s);
			} else {
				for (int j = 0; j < bytes.length; j++) {
					sb.append("%" + toHexString(bytes[j]));
				}
			}
		}
		return sb.toString();
	}

其中"20%"是“ ”空格。按此方法可轻松解决url路径中包含中文不兼容问题。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值