将UTF-8字符串转换为字母数字字符串,不会丢失信息

时间:2014-01-21 19:35:58

标签: java regex string

我想使用Jake Wharton的DiskLruCache for Android来将CouchDb文档缓存在磁盘上。 CouchDb ids只是任何JSON字符串,因此看起来Sömething/Like/Thís。但是,图书馆的文档说明了

  

每个缓存条目都有一个字符串键和固定数量的值。每个密钥必须与正则表达式[a-z0-9_-]{1,64}匹配。

所以我需要一种方法来转换任意字符串以符合正则表达式[a-z0-9_-]{1,64},同时仍然是唯一的。我怎么能优雅地做到这一点?

3 个答案:

答案 0 :(得分:1)

如何计算原始JSON字符串的64个字符散列并将此散列用作缓存的键?

但是,这并不能保证是独一无二的。但话说回来,将任何JSON字符串映射到* [a-z0-9 _-] {1,64} *将永远不会。

答案 1 :(得分:0)

this question:你可以将原始字符串转换为字节的十六进制表示的字符串表示。

public String toHex(String arg) {
    return String.format("%040x", new BigInteger(1, arg.getBytes("UTF-8")));
}

虽然这可能会产生明显大于前一个字符串的String,并且可能会溢出64个字符的限制。

答案 2 :(得分:-1)

如果要反转它,使用哈希是不可行的。 Base 64与您的要求不符,但您可以尝试类似的东西:

仅使用[a-z0-9_-]对每个字符进行编码,或者更确切地说,如果字符与[a-z0-9_]不匹配,请将其替换为以 - 开头的unicode值。