同事拿了块海思平台的板子过来,说是Wifi列表中文显示乱码,让我帮忙分析下原因。然后自己查看了下/data/misc/wifi目录:
查看了一下wpa_supplicant.conf文件,如下图,
在那个板子上发现这里的中文是正常显示的,
然后跟踪了一下Setting调用到Framework的WifiSsid.java中,发现在进行字符编码的时候,Hisi默认处理为GB2312,修改为UTF-8即可。
具体修改的位置:
framework/base/wifi/java/android/net/wifi/WifiSsid.java
public String toString() {
byte[] ssidBytes = octets.toByteArray();
// Supplicant returns \x00\x00\x00\x00\x00\x00\x00\x00 hex string
// for a hidden access point. Make sure we maintain the previous
// behavior of returning empty string for this case.
if (octets.size() <= 0 || isArrayAllZeroes(ssidBytes))
return "";
// TODO: Handle conversion to other charsets upon failure
Charset charset = Charset.forName("GB2312");
CharsetDecoder decoder = charset.newDecoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE);
CharBuffer out = CharBuffer.allocate(32);
CoderResult result = decoder.decode(ByteBuffer.wrap(ssidBytes), out, true);
out.flip();
if (result.isError()) {
return NONE;
}
return out.toString();
}
这里将GB2312修改为UTF-8即可。