2012-03-22 69 views
2

我有一个无线接入点,它带有一个SSID,它是一串unicode字符(例如:“ԱԲԳԴԵԶԷԸԹԺԻԼ”),我希望我的Android设备连接到该接口。当我的设备(Nexus One)检测到热点时,SSID如下所示:“܍܍܍܍܍܍܍܍”并且无法识别。任何想法如何解决这个问题?为什么我无法在Android上检测到具有unicode字符的wifi SSID?

+0

使用A-Z为你的SSID,统一可能会导致各种问题。 – zapl 2012-03-22 22:34:08

+1

@zapl它不是unicode,会导致“各种问题”,但在某些设备上缺乏对它的支持 - 因为制造商不支持它更简单,更便宜。 – Rolf 2016-01-13 18:09:03

+1

@Rolf仍然意味着Unicode是ssids中的一个坏主意 – zapl 2016-01-13 22:17:22

回答

2

我写了一个应用程序“WiFi连接管理器”来解决这个问题。但是,我不明白任何亚美尼亚人,所以可能无法正确显示结果。即使名称与我的应用程序不正确显示,您仍然可以连接到访问点。

您可以在Android Market找到它。

或者您可以download it here

+0

太棒了!你是如何克服特殊性格问题的?我试图使用unicode字符作为底层位序列的表示,所以我必须能够将它结合到我自己的应用程序中。 (这是我的主人的项目 - 我保证我不会让你的应用成为竞争对手,哈哈。) – Ben 2012-03-24 19:52:18

+1

你需要直接处理wifi服务才能获得原始扫描结果。结果与设备和驱动程序不同。如果您只需要它在一台设备上工作,则不需要太多时间。 – roamingsoft 2012-03-26 07:29:35

+0

我在问这个问题,并在这里提供一个赏金:http://stackoverflow.com/questions/20277425/non-ascii-ssids-in-android – 2014-03-26 13:53:09

2

在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,所以我以前的答案是无效的。

+0

“你只能使用最多8个字符在你的SSID中“ - 不得超过32个。请记住使用1-4个字节 - 对于东方语言通常只有2个 – 2013-11-29 02:16:34

+0

,该规范还允许:http://standards.ieee.org/getieee802/download/802.11-2012。 pdf – 2013-11-29 02:17:35

+0

请注意,如果Unicode以UTF-8编码,则可以将Unicode字符存储在字节数组中。所以上面的答案并不是真的有效。 – 2012-10-25 22:13:03

相关问题