admin管理员组文章数量:1029553
玩转服务器
滴水穿石 非一日之功
今天我们还是来看一个新手用户会普遍困惑的问题:眼见不一定为实。
问题
先来看问题:
用户问题示例
用户反馈了一些奇奇怪怪,都是按照正常理解本不应该出现的报错。追问一下,甚至代码还是参考的我们往期的教程。比如:玩转服务器—从卡顿到秒装,Conda焕新极速体验
教程中给出了miniconda
的下载地址:
教程
但是如果直接在微信浏览器里复制粘贴,会报错:
微信浏览器复制粘贴报错信息
一开始我还怀疑是不是镜像网址无法访问了。但是我发现同样的教程,在Edge浏览器打开,复制粘贴到服务器就能正常下载,所以这个坑纯纯是微信自己埋的。
对比查看
我们来看一下不同浏览器复制粘贴内容的对比:
从不同途径复制相同内容到文本编辑器查看
这么一看,是不是就发现问题了。也就是为什么会有那些奇奇怪怪的报错。因为我们复制粘贴所看到的,并不是我们真实输入的内容。
我们很多教程代码都是在微信公众号分享,大家会很自然的用微信打开教程复制粘贴,但是微信这个问题,在我看来真的是令使用体验非常不好。至于还有哪些地方复制粘贴会有添加莫名隐藏字符,欢迎大家留言交流。
如何检查
如果你怀疑你的代码有隐藏字符,该如何查看:
1、文本编辑器检查
复制你的粘贴内容,放入文本编辑器查看,比如 Sublime Text
Sublime Text 文本编辑器
如果你的 Sublime Text 无法显示不可见字符,可能是没有设置相关显示参数。
在首选项 ——>设置
增加 "draw_unicode_white_space": "punctuation"
设置,保存即可。
如果设置为 "draw_unicode_white_space": "none"
则不显示隐藏字符。 不过punctuation
设置一般是默认设置。
2、放到Rstudio代码编辑区检查
如果你电脑上没有文本编辑器,那你复制到Rstudio的代码编辑区,一样可以看到区别。
3、Shell端查看
代码语言:javascript代码运行次数:0运行复制echo "wget -c .sh"|cat -vte
或者
echo "wget -c .sh"|cat -A
4、一些在线工具
类似工具应该还有很多,其他好用的工具,大家也可以评论区推荐。
Hidden Characters Viewer
不仅可以查看隐藏字符,还能一键清理隐藏字符。
Hidden Characters Viewer
清理的可能不是那么完美还是需要自己检查一下。比如空格就被误清理了。
View non-printable unicode characters
- .php?s=PER
清理隐藏字符
关于这种隐藏字符的问题,前面我们也介绍过,详见:从微信聊天记录复制粘贴的Linux代码为什么运行失败?
为什么会添加隐藏字符?
真实原因是什么就不得而知了,不过查询了一下AI,可能的原因是:
1. 防复制/防爬虫机制
- 微信内置浏览器(X5内核)为了防止用户直接复制内容(尤其是链接、脚本等),可能会在复制的文本中插入不可见字符(如
<0xa0>
)。 - 这种行为类似于某些网站在网页内容中插入「复制保护代码」,目的是增加爬虫抓取的难度。
2. 格式保留与兼容性问题
- 微信浏览器可能试图保留原始内容的「富文本格式」(例如空格、换行符),但由于编码处理不当,会插入非标准字符(如
<0xa0>
是 Unicode 的非换行空格
)。 - 例如,提到的
wget<0xa0>-c<0xa0>
中的<0xa0>
会导致命令无法执行,因为 Shell 不识别这种字符。 - 微信浏览器的设计目标更偏向「内容消费」而非「开发辅助」,因此对代码复制的处理不够严谨。
玩转服务器
滴水穿石 非一日之功
今天我们还是来看一个新手用户会普遍困惑的问题:眼见不一定为实。
问题
先来看问题:
用户问题示例
用户反馈了一些奇奇怪怪,都是按照正常理解本不应该出现的报错。追问一下,甚至代码还是参考的我们往期的教程。比如:玩转服务器—从卡顿到秒装,Conda焕新极速体验
教程中给出了miniconda
的下载地址:
教程
但是如果直接在微信浏览器里复制粘贴,会报错:
微信浏览器复制粘贴报错信息
一开始我还怀疑是不是镜像网址无法访问了。但是我发现同样的教程,在Edge浏览器打开,复制粘贴到服务器就能正常下载,所以这个坑纯纯是微信自己埋的。
对比查看
我们来看一下不同浏览器复制粘贴内容的对比:
从不同途径复制相同内容到文本编辑器查看
这么一看,是不是就发现问题了。也就是为什么会有那些奇奇怪怪的报错。因为我们复制粘贴所看到的,并不是我们真实输入的内容。
我们很多教程代码都是在微信公众号分享,大家会很自然的用微信打开教程复制粘贴,但是微信这个问题,在我看来真的是令使用体验非常不好。至于还有哪些地方复制粘贴会有添加莫名隐藏字符,欢迎大家留言交流。
如何检查
如果你怀疑你的代码有隐藏字符,该如何查看:
1、文本编辑器检查
复制你的粘贴内容,放入文本编辑器查看,比如 Sublime Text
Sublime Text 文本编辑器
如果你的 Sublime Text 无法显示不可见字符,可能是没有设置相关显示参数。
在首选项 ——>设置
增加 "draw_unicode_white_space": "punctuation"
设置,保存即可。
如果设置为 "draw_unicode_white_space": "none"
则不显示隐藏字符。 不过punctuation
设置一般是默认设置。
2、放到Rstudio代码编辑区检查
如果你电脑上没有文本编辑器,那你复制到Rstudio的代码编辑区,一样可以看到区别。
3、Shell端查看
代码语言:javascript代码运行次数:0运行复制echo "wget -c .sh"|cat -vte
或者
echo "wget -c .sh"|cat -A
4、一些在线工具
类似工具应该还有很多,其他好用的工具,大家也可以评论区推荐。
Hidden Characters Viewer
不仅可以查看隐藏字符,还能一键清理隐藏字符。
Hidden Characters Viewer
清理的可能不是那么完美还是需要自己检查一下。比如空格就被误清理了。
View non-printable unicode characters
- .php?s=PER
清理隐藏字符
关于这种隐藏字符的问题,前面我们也介绍过,详见:从微信聊天记录复制粘贴的Linux代码为什么运行失败?
为什么会添加隐藏字符?
真实原因是什么就不得而知了,不过查询了一下AI,可能的原因是:
1. 防复制/防爬虫机制
- 微信内置浏览器(X5内核)为了防止用户直接复制内容(尤其是链接、脚本等),可能会在复制的文本中插入不可见字符(如
<0xa0>
)。 - 这种行为类似于某些网站在网页内容中插入「复制保护代码」,目的是增加爬虫抓取的难度。
2. 格式保留与兼容性问题
- 微信浏览器可能试图保留原始内容的「富文本格式」(例如空格、换行符),但由于编码处理不当,会插入非标准字符(如
<0xa0>
是 Unicode 的非换行空格
)。 - 例如,提到的
wget<0xa0>-c<0xa0>
中的<0xa0>
会导致命令无法执行,因为 Shell 不识别这种字符。 - 微信浏览器的设计目标更偏向「内容消费」而非「开发辅助」,因此对代码复制的处理不够严谨。
本文标签: 玩转服务器
版权声明:本文标题:玩转服务器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747567367a2178700.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论