![无法连接到 SSID 包含变音符号的 WiFi 网络](https://linux22.com/image/48513/%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0%20SSID%20%E5%8C%85%E5%90%AB%E5%8F%98%E9%9F%B3%E7%AC%A6%E5%8F%B7%E7%9A%84%20WiFi%20%E7%BD%91%E7%BB%9C.png)
我当前的 WiFi 网络(我是在 Windows -.- 的帮助下写这篇文章的)的 SSID 中有一个变音符号:“ö”。
如果无法更改 SSID,如何连接到这样的网络?
这不适用于 Ubuntu 12.04 或 Android 2.3.6 或 Android 4.0,所以我猜这是一个普遍的 Linux 问题。网络适配器是“Broadcom 4313”。
问题似乎是网络隐。 Android 和 Ubuntu 都无法正确解释手动输入的 SSID 字符串。但是,如果网络未被隐藏,两个系统都可以看到网络。 Ubuntu 可以正确识别 SSID 名称,Android 在变音符号“ö”处失败,并且也错过了以下两个字符(因此,它看到的不是“[一些字符]örc[一些其他字符]”,而是“[一些字符] [一些其他字符” ]”)。
因此,隐藏 SSID 和特殊字符 SSID 的组合导致了问题。
答案1
我猜这与编码有关。根据这个答案,SSID 可能(现在)具有显式 UTF-8 或 UNSPECIFIED 编码,但“SSIDEncoding”字段是较新标准的一部分。据推测,在设备比这更旧的网络上,它实际上是“未指定的”。
我认为任何根据人类输入的文本设置 SSID 的操作都会以 ASCII 或 UTF-8 格式进行。然而,指定 SSIDEncoding 字段的标准似乎是 2012 年制定的,因此在此之前,可以使用任何编码(并且仍然可以使用任何编码,如未指定)。因此,可能有某些软件将它们设置为其他格式——例如,使用 ASCII,但当字符串包含奇数字符时,则使用 UTF-16。 Java 和我相信 Windows 内部都使用 UTF-16。
路由器几乎肯定将 SSID 视为字节序列,根本不关心任何潜在的编码,因此在设置 SSID 时它将接受传递的任何内容。要确定这一点,您必须查看广播的实际字节序列。
如果网络未被隐藏,两个系统都可以看到网络。
可以识别 UTF-16 字符串的本质,因此当不隐藏时,可能会发生这种情况,并将 SSID 转换为本地编码以进行显示。但是当你尝试手动输入时,系统无法知道在广播中使用什么编码;只有当它与最初设置它的软件的方法相匹配时,它才会起作用。新的 SSIDEncoding 字段确实有可能解决这个问题,但是 A)它也允许存在未指定的漏洞,并且 B)旧设备不会关心。由于linux和android一般使用UTF-8,如果SSID实际上是一个UTF-16字符串,它可能最终在屏幕上看起来相同,但在手动输入和搜索时不匹配。
答案2
至于 Android 问题,我和其他人已经通过这个 Android 应用程序取得了成功:https://play.google.com/store/apps/details?id=com.roamingsoft.manager
答案3
也许我的建议是一个愚蠢的建议,但您可以使用 $ setxkbmap -layout de
系统上的图形工具设置德语键盘布局并输入 SSID 吗?
答案4
添加手动输入怎么样wpa_supplicant.conf
?对于带有“umlaut”的 SSID,只需添加十六进制的 ssid-entry。
SSID=$(echo 'SSID' | xxd -u -p)
network={
priority=1
ssid=$SSID
mode=0
key_mgmt=WPA-PSK
psk="PASSWORD"
}
不要在conf 文件中使用var。只需从终端获取它并写下不带引号的十六进制即可。