我想编写一个可逆编码器以及相应的解码器,这样任何字符串都可以编码为与Unix文件系统的文件命名规则相对应的合法文件名。 怎么做到这一点? 例: “xyz.txt”将是一个有效的文件名,而“xyz / .txt”则不会。
答案 0 :(得分:0)
tl; dr :您的方法存在缺陷。坚持文件系统的局限性。它们很难被优雅地克服(特别是在没有引入你自己的,甚至更奇怪的限制的情况下)。
不可能制作一个严格可解码的。您正在尝试将较大的域映射到较小的域,这意味着无法知道反向映射 - 正确可逆。
通过一个简单的示例很容易演示:如何对/
进行编码以使其可以反转? “简单”,你可能会说,“我只会用令牌x
替换。”但是现在您如何知道x
何时是实际的x
,以及当您的x
是一个应该转换为x
的'特殊'/
时?你不能。
你当然可以建立一个不太可能发生意外冲突的系统。例如,您可以将其更改为/
,而不是将-
更改为---
(这非常容易出错)。
哦,同样,对于它的价值,大多数unix文件系统实际上认为除/
以外的任何字符或空字符都是有效字符(more)。显然,使用它是一种痛苦的屁股。