2012-03-22 6 views
2

Android搭載端末に接続したいユニコード文字列(例:「ԱԲԳԵԶԷԸԹԺԻԼԵԶԷԸԹԺԻԼ」)のSSIDを持つWi-Fi APがあります。私のデバイス(Nexus One)がホットスポットを検出すると、SSIDは "܍܍܍܍܍܍܍܍"のようになり、認識できません。どのようにこれを修正するための任意のアイデア?Androidでユニコード文字のwifi SSIDを検出できないのはなぜですか?

+0

SSIDにa-zを使用すると、すべての種類の問題が発生する可能性があります。 – zapl

+1

@zapl「すべての種類の問題」を引き起こすのはユニコードではありませんが、一部のデバイスではそれがサポートされていません。メーカーがサポートしない方が簡単で安いからです。 – Rolf

+1

@RolfはまだU​​nicodeがssidsの悪いアイデアであることを意味します – zapl

答えて

2

この問題を解決するためのアプリ「WiFi Connection Manager」を作成しました。しかし、私はアルメニア語を理解していないので、結果が正しく表示されないことがあります。私のアプリで名前が正しく表示されなくても、アクセスポイントに接続することはできます。

Android Marketにあります。

download it hereでもかまいません。

+0

恐ろしいです!特殊文字の問題をどのように克服しましたか?私は基本的なビットシーケンスの表現としてユニコード文字を使用しようとしているので、私は自分のアプリケーションにこれを組み込むことができる必要があります。 (これは私の師匠のプロジェクトです。私はあなたのアプリに競合する人はいないと約束します。) – Ben

+1

生のスキャン結果を得るには、wifiサービスに直接対処する必要があります。結果はデバイスやドライバとは異なります。 1つのデバイスでのみ動作する必要がある場合は、時間がかかりません。 – roamingsoft

+0

私は正確にどのように賞品を提供しているのかを尋ねています:http://stackoverflow.com/questions/20277425/non-ascii-ssids-in-android –

2

802.11パケットのSSIDフィールドは32バイトです。私は、Androidデバイス(他のデバイスと同様)が各バイトを個々の文字として解釈することを選択していると信じています(おそらくこれも802.11標準の一部です)。このため、SSIDは32文字に制限されています。

各文字を表すのに1バイトしか使用していないので、使用するビットは8ビットです。 2の補数系(おそらく使用される)を使うと、表現できる最高の数は127(2 ^(8-1))です。

標準のASCII文字は、1バイトで表すことができ、それぞれ0〜127の10進数値に対応します。一方、Unicode文字は、1〜4バイトのいずれかを表す必要があります。したがって、SSIDフィールドに4バイトのUnicode文字を含むように802.11仕様を変更した場合、SSIDには最大8文字しか使用できません。私は、誰かが小さいプールから32文字を好むことを決めたラインのどこかに、より大きなプールから8文字以上あると推測します。

デバイス上にカスタムドライバを書き込んで、32バイトのSSIDフィールドをUnicode文字として解釈することで回避できますが、推奨しません。コメントで述べたように

、Unicode文字はので、私の以前の答えは有効ではありませんUTF-8としてエンコードすることができます。

+0

"最大8文字あなたのSSIDで " - 最大32です。1-4バイトが使用されています - 東洋言語の場合は通常2 –

+0

も指定できます:http://standards.ieee.org/getieee802/download/802.11-2012。 pdf –

+0

UnicodeがUTF-8でエンコードされている場合、Unicode文字をバイト配列に格納することが可能であることに注意してください。したがって、上記の答えは実際には有効ではありません。 –

関連する問題