我有一个 Wi-Fi AP,其 SSID 是一串 unicode 字符(例如:“??”),我希望 Android 设备连接到它。当我的设备(Nexus One)检测到热点时,SSID 看起来像这样:“”并且无法识别它。知道如何解决这个问题吗?
最佳答案
<罢工> 802.11数据包中的SSID字段有32字节。我相信 Android 设备(以及其他设备)选择将每个字节解释为单个字符(这可能也是 802.11 标准的一部分)。这就是 SSID 限制为 32 个字符的原因。
现在由于我们只使用一个字节来表示每个字符,因此我们只有 8 位可用。使用二进制补码系统(可能使用),我们可以表示的最大数字是 127 (2 ^ (8-1))。
标准 ASCII 字符可以用单个字节表示,每个字节对应于 0 到 127 之间的十进制值。另一方面,Unicode 字符需要 1 到 4 个字节来表示。因此,如果将 802.11 规范修改为在 SSID 字段中包含 4 字节 Unicode 字符,则您最多只能在 SSID 中使用 8 个字符。我猜想有人决定偏爱较小池中的 32 个角色,而偏爱较大池中的 8 个以上的角色。
您可以通过在设备上编写自定义驱动程序以将 32 字节 SSID 字段解释为 Unicode 字符来解决此问题,但我不建议这样做。
罢工>
正如评论中提到的,Unicode 字符可以编码为 UTF-8,所以我之前的答案无效。
关于android - 为什么我在 Android 上无法检测到带有 unicode 字符的 wifi SSID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831055/