Windows及Linux文件名特殊字符
概述
在做Java实现HTML页面截图功能时,Linux系统生成的文件通过MobaXterm这么一款SSH工具下载到本地Windows时,总是报错:
但是这个文件在Linux服务器里面确实是存在的。仔细对比文件名,才发现文件名里面还有一个|
字符,下载到Windows时失败。
失败的原因(直接抛出结论):|
字符在Linux系统下是合法的文件名,但是Windows下则不是,故而下载失败。MobaXterm这个工具并未考虑到这个字符兼容的问题,哈哈哈。
Windows
在使用Windows时,经常遇到如下报错:
文件是存放数据的最根本单位,每个文件都有唯一一个文件名用于标记文件。
内容 | 说明 |
---|---|
/ | Linux的路径分隔符,使用后会导致路径错误 |
\ | Windows的路径分隔符,使用后会导致路径错误 |
: | 一些编译语言,如java会用它作用文件间的分隔符 |
? | 在很多控制台命令中,会当成通配符使用 |
* | 在很多控制台命令中,会当成通配符使用 |
| | 一些语言中被当成分隔符使用,如Markdown的制表符 |
" | 大多数语言中会被当成字符串的开始和结束符,必需转义使用 |
' | 一些语言,如Python中,会作为字符串开始和结束符使用 |
< | 在HTML或XML中标签开始的标记 |
> | 在HTML或XML中的标签结束标记 |
| 空格在DOS中,会被当成分隔符使用,必需加引号才可正常工作 |
$ | 在很多环境中会被当成变量开始符号,如Shell |
推荐使用的安全非字母和数字符号。
内容 | 说明 |
---|---|
_ | 下划线任何语言中都可以使用的安全字符。 |
@ | 因邮件地址而出名,可以安全使用(注意不要和自己的邮件地址冲突) |
+ 和- | 这两个符号虽然也做为运算符,但是作为文件名是没有任何问题的。 |
. | 安全,虽然在 windows 中作为后缀的分隔附,但是不影响正常使用。 |
代码处理:
public static String replaceSpecialCharacters(String filename) {
/*
* windows下文件名中不能含有:\ / : * ? " < > | 英文的这些字符 ,这里使用"."、"'"进行替换。
* \/:?| 用.替换
* "<> 用'替换
*/
filename = filename.replaceAll("[/\\\\:*?|]", ".");
filename = filename.replaceAll("[\"<>]", "'");
return filename;
}
Linux
Linux系统下的特殊字符:-
(文件名第一个字母)、#
、;
、$
、!
、@
、&
、(
、)
、\
、<
、>
、(空格)
处理方法:
- 最简单直接的办法,用绝对路径,如:
touch ./tmp/Me like yuh.mp3
- 使用转移符
\
:cp a\&b.c de.c
- 通过双引号
"
:cp "a&b.c" de.c
- 特殊地,文件名最前面是
-
,通过加两个-
:rm -- -ab.c
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2018-06-16 一文总结应用、Web、HTTP服务器,Apache、Nginx,Tomcat、IIS、JBoss、Glassfish等区别
2017-06-16 Linux学习之工作常用Linux命令
2017-06-16 kubernetes基础入门总结
2017-06-16 接口测试神器Postman使用教程
2017-06-16 Git使用笔记
2017-06-16 Docker入门知识
2017-06-16 Maven问题总结