文件名中的非法字符
问题描述:
在我的文件上传过程中,我发现非法字符被保存在表中。 zurück.pdf,C _Word.doc是文件名。这里ü,C和之间的空格_Word被发现为?表列中的。我通过用_(下划线)替换非字母数字值来验证客户端中的文件名,但它仍然转义并保留到数据库中。这些在客户端如何处理?文件名中的非法字符
答
作为一个德语母语的人,我可以向你保证,'ü'和''都不是非法字符。
您的数据表使用哪种字符编码,以及您在客户端如何确保所有字符都落入有效范围内?
如果您的数据库仅支持ASCII字符(并且无法更改),那么您应该使用System.Text.ASCIIEncoding,它用'?'替换所有非ASCII字符。为你。
更好的是,转义Unicode字符并以与ASCII字符集兼容的某种方式表示它们(例如,使用'\ u9404')来表示Unicode字符9404,参见RFC5137以获取某些执行此操作的方法并阅读Convert a Unicode string to an escaped ASCII string的答案。
答
您可以使用CustomValidator
,致电System.IO.Path.GetInvalidFileNameChars()
或将其结果转换为正则表达式,以使用RegulaExpressionValidator
进行客户端验证。
答
我同意Sebastian - 问题不在于这些文件名是非法字符,而是它们对于您正在使用的数据库不是有效字符。假设数据库是SQL Server,请尝试将列数据类型更改为nchar,nvarchar或ntext(如果它当前是char,varchar或text之一)。