簡體   English   中英

將UTF-8字符串轉換為字母數字字符串,而不會丟失信息

[英]Convert UTF-8 string to alphanumeric string without information loss

我想用傑克沃頓DiskLruCache為Android緩存CouchDB的文件在磁盤上。 CouchDb ids只是任何JSON字符串,因此看起來Sömething/Like/Thís 但是,該庫的文檔狀態

每個高速緩存條目都有一個字符串鍵和固定數量的值。 每個密鑰必須與正則表達式[a-z0-9_-]{1,64}相匹配。

因此,我需要一種方法來轉換任意字符串以使其符合正則表達式[a-z0-9_-]{1,64} ,同時仍然是唯一的。 我該如何優雅地做到這一點?

如何計算原始JSON字符串的64個字符的哈希並將該哈希用作緩存的鍵?

但是,這不能保證是唯一的。 但是再說一次,將任何JSON字符串映射到* [a-z0-9 _-] {1,64} *永遠都不會。

這個問題出發:您可以將原始字符串轉換為其字節的十六進制表示形式的字符串表示形式。

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

盡管這可能會產生比以前大得多的String,並且可能會溢出64個字符的限制。

如果要反轉哈希,則不可行。 Base 64不符合您的要求,但是您可以嘗試類似的方法:

僅使用[a-z0-9_-]編碼每個字符,或更確切地說,如果該字符與[a-z0-9_]不匹配,則將其替換為以-開頭的unicode值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM