ASCII 码不同的两种空格:32 和160

背景

在 Linux 下手写一个命令和拷贝 html 页面文本域中的命令执行结果完全不同,后者的命令无法被 Linux 识别。

问题截图

在这里插入图片描述
肉眼根本看不出来这两行有什么区别,但执行结果就是有问题。

问题定位

编写测试代码,执行两个字符串的 equals 方法,输出结果是 false。逐个输出对应字符的 ASCII 值,发现一个 echo 命令后的空格,一个是 32,另一个是 160。而 160 那个空格来自页面文本域的拷贝值。

网络搜索果然有关于这两个空格的坑,160 这个空格是是由页面上的   产生的空格,全称为“non-breaking space”,其 UTF-8 编码值为 u00A0。

解决办法,将页面表单中的 160 空格替换为普通空格:

		String s11 = "mem_status=`free -m|sed -n '2p'|sed -E 's/ +/ /g'`;mem_total=`echo $mem_status|cut -d \\\" \\\" -f 2`;mem_used=`echo $mem_status|cut -d \\\" \\\" -f 3`;mem_usedpercent=`echo \\\"scale=2;$mem_used*100/$mem_total\\\" | bc | awk '{printf \"%.2f\", $0}'`;echo $mem_usedpercent";
		String s22 = "mem_status=`free -m|sed -n '2p'|sed -E 's/ +/ /g'`;mem_total=`echo $mem_status|cut -d \\\" \\\" -f 2`;mem_used=`echo $mem_status|cut -d \\\" \\\" -f 3`;mem_usedpercent=`echo \\\"scale=2;$mem_used*100/$mem_total\\\" | bc | awk '{printf \"%.2f\", $0}'`;echo $mem_usedpercent";
		System.out.println("s1=s2:"+s11.equals(s22));
		s22 = s22.replaceAll("\\u00A0+", " ");
		s11 = s11.replaceAll("\\u00A0+", " ");
		System.out.println("s1=s2:"+s11.equals(s22));

就是一个简单的获取 Linux 操作系统的磁盘使用百分比的命令集。
替换后两字符串的 equals 返回真,执行结果:

s1=s2:false
s1=s2:true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值