📶 Emojis and Wi-Fi: Why Can’t We Be Friends? 😃

Published by Carlos Hernandez May 24, 2018

Isn’t Carlos good with computers? He can set it up. 😁

One of the first things people do when they move into a new home is set up their Wi-Fi network. This is usually done by their internet service provider or in-house IT expert. I recently moved into an apartment and was designated the in-house IT expert (an unpaid position as far as I can tell). After our ISP set up our internet connection, I booted up my Wi-Fi router and navigated to the settings page where I could configure the Wi-Fi network name and password. I pulled up my phone’s Wi-Fi Settings to see what my neighbors were using for a little inspiration.

Figure 1. Dramatization of my apartment’s Wi-Fi networks

Screen Shot 2018-05-15 at 11.35.57 AM

Woah! Emojis and lots of spaces. I decided to try inputting emojis into my router’s wireless settings (on my router I had to use this workaround). Most products (laptops, smartphones, tablets) have been able to connect to this network without any issues. But some of my connected (or maybe I should say disconnected) products (I won’t name names) fail miserably. I had to either stop using these emoji unfriendly products altogether or temporarily bring up an emoji-free guest network -- neither of which is a good solution. 

What?  My products don't work if my NEIGHBOR uses emojis? 😡

To understand why these emojified network names work with some products and not others, we can first do some investigating to find the formal definition of a Wi-Fi network name. To find this information, we can refer to the IEEE 802.11 specification. The IEEE 802.11 specification forms the basis for Wi-Fi technology. It defines a network name using a parameter called a Service Set Identifier (SSID). It defines an SSID as follows:

The length of the SSID field is between 0 and 32 octets. [...] the character encoding of the octets in this SSID element is unspecified.

(Note: The specification also mentions a special “UTF-8 SSID subfield.”  This is a flag used to tell clients interested in this network decode the bytes in the SSID field as if they were encoded using UTF-8. Many access points do not take advantage of this flag even if they do encode their SSIDs using UTF-8 encoding.)

This means that Wi-Fi enabled devices are expected to handle SSIDs that are comprised of 32 octets (bytes) of any value and any encoding. Unfortunately, some devices can only decode a limited set of SSID byte values such as the printable character ASCII range. ASCII characters correspond to a single byte value. For example, an upper-case “C” is encoded as hex value “0x43” which can be stored in a single byte. SSIDs with byte values that correspond to a character within this limited range will work fine with these devices. Other encoding schemes such as UTF-8 contain byte values that fall outside this range. In fact, some characters such as emojis can take several bytes to encode using UTF-8. For example, the cool sunglasses “😎” emoji corresponds to UTF-8 byte sequence “0xf0 0x9f 0x98 0x8e” which takes four bytes to store. Note that the bytes in the sequence fall outside of the printable character ASCII range.

Why Your Products Might Fail 👹

Although emojis in SSIDs are still fairly uncommon in the US, they are becoming more common, and a limited character set is definitely a problem for products that are sold to non-English speaking customers. UTF-8 (the most common encoding for web pages worldwide) can be used to encode the entire official Unicode character set (currently over 130,000 characters). This set covers characters from several major languages including Chinese, Spanish, and Japanese. For example, SSIDs “中文”, Español”, and “日本語” encoded using UTF-8 are both allowed by the 802.11 specification.

A Google search reveals pages of results with this exact problem occurring in many devices. When a user is trying to set up the product either through an app or through a display on the product itself, they may get mixed results with these special character network names. Some products will simply exclude these SSIDs when they present the user networks the product can join. Other products may try to decode the byte values and either present strange characters to the user or even crash. At Cirrent, we have encountered products that present an empty Wi-Fi network list if they encounter a network name that they could not decode. This means if your neighbor used an special character in their network name, you would not be able to select your Wi-Fi network with this product because you would be presented with an empty Wi-Fi list!

For many consumers, interaction with Wi-Fi technology starts and ends with two things: the network name and the password. A completely valid network name working for one product and not another can cause frustration and lead to negative reviews of the non-functioning product. What’s worse is the feedback (if any) given by these errors is not useful. The average consumer has no way of figuring out that a nearby Wi-Fi network is causing their product to misbehave. Product companies have to eat the costs of the bad reviews and support calls resulting from subtle issues like Wi-Fi network names.

Here at Cirrent we see these kinds of Wi-Fi problems all the time, and are constantly evolving our solution to address issues as they arise. Most of the product companies we work with want reliable, easy-to-use Wi-Fi, and don't want their engineers to spend their days tracking down these issues themselves.  Until next time, 👋!

New Call-to-action