2012-03-22 60 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

相關問題