ubuntu – 无法使用包含变音符号的SSID连接到wifi网络
作者:互联网
我目前的WiFi网络(我在Windows-.-的帮助下写这个)在其SSID中有一个变音符号:“ö”.
如果无法更改SSID,如何连接到这样的网络?
这不适用于Ubuntu 12.04或Android 2.3.6或Android 4.0,所以我猜这是一个普遍的Linux问题.网络适配器是“Broadcom 4313”.
问题似乎是网络被隐藏了. Android和Ubuntu都无法正确解释手动输入的SSID字符串.但是,如果没有隐藏,两个系统都可以看到网络. Ubuntu正确地看到SSID名称,Android在变音符号“ö”失败并且也错过了以下两个字符(因此它不是“[some characters]örc[some some characters]”而是看到“[some characters] [some some characters] ]“).
所以它是隐藏的SSID和特殊字符SSID的组合导致问题.
解决方法:
我猜这与编码有关.根据this answer,SSID可以(现在)具有明确的UTF-8或未知编码,但是“SSIDEncoding”字段是较新标准的一部分.据推测,然后在具有比这更早的设备的网络上,它实际上是“未指定的”.
我想,任何通过人类输入文本来设置SSID的东西都可以用ASCII或UTF-8进行.但是,指定SSIDEncoding字段的标准似乎是2012年的日期,因此在此之前,可以使用任何编码(并且任何编码都可以使用,作为版本).因此可能会有某些软件将它们设置为其他东西 – 例如,当字符串包含奇数字符时,使用ASCII但返回UTF-16. Java和我相信Windows都在内部使用UTF-16.
路由器几乎肯定将SSID视为一个字节序列,根本不关心任何潜在的编码,因此它将接受在设置SSID时传递的任何内容.要确定这一点,您必须将实际的字节序列视为广播.
both systems can see the network, if it’s not hidden.
可以识别UTF-16字符串,因此当不隐藏时,可能会发生这种情况,并且SSID会转换为本地编码以供显示.但是当您尝试手动输入时,系统无法知道广播中使用的编码;它只有在匹配首先设置它的软件的方法时才有效.新的SSIDEncoding字段确实可以解决这个问题,但是A)它还允许了未来的漏洞,而B)旧设备也不会关心.由于linux和android通常使用UTF-8,如果SSID实际上是UTF-16字符串,它可能最终在屏幕上看起来相同,但在手动输入并搜索时不匹配.
标签:android,character-encoding,ubuntu,wifi,broadcom 来源: https://codeday.me/bug/20190810/1638152.html