如何编码字符串以替换所有特殊字符

时间:2011-12-05 07:14:46

标签: java android

我有一个包含特殊字符的字符串。但我必须将字符串转换为字符串而不具有任何特殊字符,因此我使用Base64但在Base64中我们使用等于符号(=)这是一个特殊字符。但我想将字符串转换为只有字母数字字符的字符串。另外我不能删除特殊字符只需要替换所有特殊字符以保持两个不同字符串之间的唯一性。如何实现这一点,哪种编码可以帮助我实现这个目标?

5 个答案:

答案 0 :(得分:3)

最简单的选择是使用UTF-8将文本编码为二进制,然后将二进制文件转换为文本为十六进制(每个字节两个字符)。它不会非常有效,但它只是字母数字。

你可以使用base32来提高效率,但这可能会显着增加工作量,除非你能找到一个开箱即用的库。 (执行十六进制编码的库非常常见。)

答案 1 :(得分:2)

最简单的方法是使用正则表达式匹配所有非字母数字字符,并用空字符串替换它们。

检查Escaping Special Characters in a Pattern

希望这会有所帮助。

答案 2 :(得分:1)

base64有很多变种,其中一些不使用填充。 (对于字符62和63,您仍然有几个非字母数字字符。)

base64上的维基百科页面详细介绍,包括用于许多常见用例的“标准”变体。 (你的其中一个匹配吗?)

如果你的字符串必须是严格的字母数字,那么你需要使用十六进制编码(一个字节变为2个十六进制数字),或者滚动你自己的编码方案。您声明的要求相当不寻常......

答案 3 :(得分:1)

Commons编解码器有一个url安全版本的base64,它发出 - 而_而不是+和/ characters

http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html#encodeBase64URLSafe(字节[])

答案 4 :(得分:0)

如果你真的只能使用字母数字字符,你将不得不想出一个使用其中一个字符的转义方案,例如,使用0作为转义,然后将特殊字符编码为2字符的十六进制编码ASCII。使用000表示0。

e.g。

This is my special sentence with a 0.

编码为:

This020is020my020special020sentence020with020a02000002e