Goufaliteはこの問題について完全に正しいです。それはまったく技術的な問題ではなく、単なる名前の問題なので、多くのアドバイスは、どの名前が最適かという著者の考えに基づいて非常に意見が分かれています。
MQTT 3.1仕様は言います:
- トピック名とトピックフィルターでは大文字と小文字が区別されます
- トピック名とトピックフィルターにスペース文字を含めることができます
- トピック名とトピックフィルターはUTF-8でエンコードされた文字列であり、65535バイトを超えてエンコードしてはなりません(MUST NOT)
したがって、純粋に技術的な観点から言えば、ASCIIのみで「スペースなし」のルールは必要ありません。すべての準拠MQTTブローカーは、それらを正常に処理できるはずです。
とにかく、HiveMQが指摘するいくつかの点に本当に同意しません。
スペースは各プログラマーの天敵であり、多くの場合、トピックが読みにくく、デバッグが困難になります。最初のものと似ていますが、何かが許可されているからといって、それを使用する必要があるという意味ではありません。UTF-8は多くの異なる空白タイプを認識しています。そのような珍しい文字は避けなければならないことは明らかです。
SPACEキーボードのキーを押す以外の方法でスペースを使用することはほとんどないため、ホモグリフの誤った使用が実際に問題になることはないと思います。
ASCII以外のUTF-8文字を使用すると、文字セットに関連するタイプミスや問題を見つけることが非常に難しくなります。文字が正しく表示されないことが多いためです。本当に必要でない限り、トピックで非ASCII文字を使用しないことをお勧めします。
公平な点-非ASCII文字の入力は大きな問題になる可能性があります。個人的にはGarage_Sensor_001/Temperature/°C
、多くのキーボードには度記号が組み込まれていないため、単純に回避します(英国のキーボードには確かにありません!)。この決定は、プロトコルによるのではなく、実際に実用性に基づいています。大した手間をかけずに特殊文字を使用でき、他の誰も文字を入力する必要がないと確信している場合は、それを試してください!
また、私はHiveMQのアドバイスの一部について少し懐疑的です。リンクしたページのさらに先には、「#に登録しないでください」と表示されていますが、これはサイトで既に異議を唱えられています!