如何在Java中安全地编码字符串以用作文件名?

如何在Java中安全地编码字符串以用作文件名?,第1张

如何在Java中安全地编码字符串以用作文件名?

如果您希望结果类似于原始文件,则SHA-1或任何其他哈希方案都不是答案。如果必须避免冲突,那么简单替换或删除“不良”字符也不是答案。

相反,您想要这样的东西。(注意:这应该作为说明性示例,而不是要复制粘贴的内容。)

char fileSep = '/'; // ... or do this portably.char escape = '%'; // ... or some other legal char.String s = ...int len = s.length();StringBuilder sb = new StringBuilder(len);for (int i = 0; i < len; i++) {    char ch = s.charAt(i);    if (ch < ' ' || ch >= 0x7F || ch == fileSep || ... // add other illegal chars        || (ch == '.' && i == 0) // we don't want to collide with "." or ".."!        || ch == escape) {        sb.append(escape);        if (ch < 0x10) { sb.append('0');        }        sb.append(Integer.toHexString(ch));    } else {        sb.append(ch);    }}File currentFile = new File(System.getProperty("user.home"), sb.toString());PrintWriter currentWriter = new PrintWriter(currentFile);

此解决方案提供了可逆编码(无冲突),其中在大多数情况下,编码后的字符串类似于原始字符串。我假设您使用的是8位字符。

URLEnprer
可以,但是它的缺点是它对很多合法的文件名字符进行编码。

如果您想要一个无法保证的可逆解决方案,则只需删除“不良”字符,而不是用转义序列替换它们。


上面编码的相反过程应同样直接实现。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5177154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存