URL编码对于特殊字符转换失败。#Android

3

我正在开发一个解决方案,需要将字符串编码为utf-8格式,这个字符串只是我使用BluetoothAdapter.getDefaultAdapter().name读取的设备名称。

对于其中一个示例,我得到了一个字符串ABC-&,对其进行编码后返回了ABC-%EF%BC%86而不是ABC-%26。在进一步调试之前,这很奇怪,但有助于确定&和&之间存在差异,第二个字符无法像预期的那样编码。

&和&是不同的。

已尝试使用URLEncoder.encode(input, "utf-8")Uri.encode(input, "utf-8")进行编码,但都没有起作用。

这只是一个示例,可能还有其他看起来与实际字符相同但无法正确编码的字符。现在的问题是:

  1. 为什么会出现这种差异,毕竟它只是使用标准SDK API从设备读取数据。
  2. 如何解决此问题。查找并替换为实际字符可能是一种方法,但范围有限,可能会有其他未知字符。

有什么建议!

1个回答

0
一种解决方案是定义允许的字符范围。然后替换或删除超出此范围的字符。
给定以下正则表达式:
[a-zA-Z0-9 -+&#]

您可以选择执行以下操作:

input.replaceAll("[a-zA-Z0-9 -+&#]", "_");

...或者如果您不关心可能为空的结果:

input.replaceAll("[a-zA-Z0-9 -+&#]", "");

第一种方法将为您提供原始蓝牙设备名称的长度一致的表示。

无论哪种方式,这种方法对我和我的同事都非常有效。希望这能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接