Java 如何对字符串进行编码以替换所有特殊字符

Java 如何对字符串进行编码以替换所有特殊字符,java,android,Java,Android,我有一个包含特殊字符的字符串。但是我必须将字符串转换成没有任何特殊字符的字符串,所以我使用Base64,但在Base64中,我们使用的是等于符号(=),这是一个特殊字符。但是我想把这个字符串转换成一个只有字母数字字母的字符串。此外,我不能删除特殊字符,只是我必须替换所有特殊字符,以保持两个不同字符串之间的唯一性。如何实现这一点,哪种编码能帮助我实现这一点?如果你真的只能使用字母数字字符,你必须想出一个转义方案,使用其中一个字符,例如,使用0作为转义,然后将特殊字符编码为ascii的2字符十六进制

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

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

e、 g

编码为:

This020is020my020special020sentence020with020a02000002e

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


您可以使用base32来提高效率,但这可能需要大量的工作,除非您能找到一个现成的库来支持它。(执行十六进制编码的库非常常见。)

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

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


如果字符串必须严格使用字母数字,则需要使用十六进制编码(一个字节变为两个十六进制数字),或者使用自己的编码方案。您声明的要求非常不寻常…

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

检查


希望这会有所帮助。

Commons codec有一个url安全版本的base64,它发出-和u而不是+和/字符


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

链接似乎已断开
This020is020my020special020sentence020with020a02000002e