路径中具有非法字符;数据库字段中的?
![](https://img2023.cnblogs.com/blog/1892002/202212/1892002-20221226140049949-1449576183.png)
最近遇到的一个报错,路径中具有非法字符,下载文件的时候报出来的。第一次遇到这个问题,看起来是下载路径有问题,有这么多文件,具体是哪个想起来就头大,因为疫情抱病在身,就拖延了几日。
查出来是文件名中有个?,导致复制文件出错。windows系统中,文件名,文件夹名中英文?是不允许存在的,中文?作为文件名是不会报错的。
文件名是入库的,通过库里的文件名来寻找文件,所以还是数据库中字段中含有?导致的。由于文件名不会有?,入库却有,最大的可能就是文件名中的空格,变成了?。
网上说是编码问题,在此记录下。原文链接:
https://blog.csdn.net/qq_42484429/article/details/105414025
UTF-8这种编码里面,存在一个特殊字符,其编码是“0xC2 0xA0”,转换成字符的时候,表现为一个空格,跟一般的半角空格(ASCII 0x20)一样,唯一的不同是它的宽度不会被压缩,因此比较多的被用于网页排版(如首行缩进之类)。而其他的编码方式如GB2312、Unicode之类并没有这样的字符,因此如果简单地进行编码转换,生成地GB2312/Unocode字符串中,这个字符就会被替换成为问号(ASCII ox3F)。此时如果进行写库、写文件之类,就会把问号直接写入了。
其实这根本就不是空格,它是一个特殊的符号。可是怎么看都像是空格,在页面的textarea里,QQ微信消息都是空格。最后我把它复制到了 “word” 里,奇怪事情的发生了,果然不是空格,坑死。
解决办法就是将这个"空格"替换成真的 空格
最后代码: