(1)
问题:
iReasoning MIB Browser查询出设备的中文显示为十六进制的,下发中文也能成功。
问题定位:
iReasoning MIB Browser查询出设备上的中文,显示为十六进制通过转码,可以转成汉字,怀疑是软件问题。
问题分析:
中文显示乱码是因为Mib Browser不支持编码识别,默认支持的是ISO-8858-1。
问题结论:
代码本身限制已限制MIB中文字符不能下发,代码不需要再适配。
void serialize(SetHandler &a, AsDisplayString &d)
问题解决方案:
Mib Browser工具换成正确的编码格式。如果想显示中文,可以设置为UTF-8编码格式。
(2)转码过程
啊 == 0xe5 0x95 0x8a
0xe5 0x95 0x8a 是 UTF-8 编码格式中的三个字节,可以转换为对应的中文字符。将这些字节解码成中文字符的过程如下:
将 0xE5 0x95 0x8A 解码为 Unicode:
拆分二进制:1110xxxx 10xxxxxx 10xxxxxx
将 0xE5 0x95 0x8A 替换为二进制格式:
0xE5 -> 1110 0101
0x95 -> 10 010101
0x8A -> 10 001010
移除前导位并连接:
1110xxxx -> 1110
10xxxxxx -> 0101 0101
10xxxxxx -> 0010 1010
得到二进制码:0101 0101 0100 1010 (拼接后除去前导位)
转换为十六进制:554A
将 554A转换为 Unicode 字符:啊
因此,0xE5 0x95 0x8A 表示的中文字符是 “啊”。
============================================
我 == 0xe6 0x88 0x91
0xe6 0x88 0x91 是 UTF-8 编码格式中的三个字节,可以转换为对应的中文字符。解码过程如下:
拆分二进制:1110xxxx 10xxxxxx 10xxxxxx
将 0xE6 0x88 0x91 替换为二进制格式:
0xE6 -> 1110 0110
0x88 -> 10 0010 00
0x91 -> 10 010001
移除前导位并连接:
1110xxxx -> xxxx
10xxxxxx -> xxxxxx
10xxxxxx -> xxxxxx
得到二进制码:0110 0010 0001 0001 (拼接并仅考虑有效位)
转换为十六进制:6211
将 6211 转换为 Unicode 字符:我
因此,0xE6 0x88 0x91 表示的中文字符是 “我”。
============================================