我有一个琴弦

s = M\\c3\\a4nager


我想用等效的拉丁字符\\c3\\a4替换ä
所以字符串应该是

s = Mänager


我在Java中搜索了很多方法,请用同样的方法帮助我
我想在代码中处理所有此类UTF-8字符。

最佳答案

要取消对LDAP字符串的转义,可以使用以下代码段

// import javax.naming.ldap.Rdn;
String escapedValue = "M\\c3\\a4nager";
Object unescapedValue = Rdn.unescapeValue(escapedValue);
System.out.println("escapedValue   = " + escapedValue);
System.out.println("unescapedValue = " + unescapedValue);


输出

escapedValue   = M\c3\a4nager
unescapedValue = Mänager


unescapedValue包含字符串作为UTF-8。如果需要其他编码,则需要正确处理。

一个简单的示例,显示不同编码的字节差异。

byte[] latinBytes = ((String)unescapedValue).getBytes(StandardCharsets.ISO_8859_1);
byte[] utf8Bytes = ((String)unescapedValue).getBytes(StandardCharsets.UTF_8);

System.out.println("latin1: " + Arrays.toString(latinBytes));
System.out.println("utf8  : " + Arrays.toString(utf8Bytes));


输出

latin1: [77, -28, 110, 97, 103, 101, 114]
utf8  : [77, -61, -92, 110, 97, 103, 101, 114]

10-05 19:18