Snmp乱码问题
来源:互联网 发布:学校网络解决方案 编辑:程序博客网 时间:2024/06/05 09:33
1.前言:
在开发Snmp协议传输数据的时候,发现中文会乱码,网上找的解决方案基本都是说,因为源码的问题,要改动源码,但是感觉改动源码太难了,很多内部调用并不是所有人都能搞得定的。
2.乱码原因
以下是乱码的源头,因为默认超过128的位数的字节,都按16进制处理
public class OctetString extends AbstractVariable implements AssignableFromByteArray, AssignableFromString { public String toString() { if (isPrintable()) { return new String(value); } //没通过isPrintable(),如ASCII控制字符,汉字等,都以16进制显示 return toHexString(); } public boolean isPrintable() { for (int i=0; i<value.length; i++) { char c = (char)value[i]; //判断是否大于0x80 (大于128的ASCII码,汉字编码都在这个区间内) if ((Character.isISOControl(c) || ((value[i] & 0xFF) >= 0x80))(!Character.isWhitespace(c))){ return false; } } return true; }
3.解决思路
将传过来的16进制,转换为中文,无须改动源码,实现代码如下:
Vector<VariableBinding> recVBs = (Vector<VariableBinding>) pdu.getVariableBindings(); for (int i = 0; i < recVBs.size(); i++) { VariableBinding recVB = recVBs.elementAt(i); //获取要转换的16进制字节 String os = recVB.getVariable().toString(); if(!(os.indexOf(":") == -1)) { String[] temps = os.split(":"); byte[] bs = new byte[temps.length]; for(int j = 0;j<temps.length;j++){ //转换byte[] bs[j] = (byte)Integer.parseInt(temps[j],16); } try{ //转换String,编码集根据发Snmp的编码集来 os = new String(bs,"GBK"); System.out.println(os); }catch (UnsupportedEncodingException e) { e.printStackTrace(); } } SetSnmpData(recVB.getOid()+"----",os); }
1 0
- Snmp乱码问题
- snmp和apache2问题
- SNMP配置问题:
- Ubuntu snmp的问题
- Linux安装SNMP的问题
- SNMP++ 01-SNMP request time out问题的解决
- SNMP
- SNMP
- SNMP
- SNMP
- SNMP
- SNMP
- snmp
- SNMP
- SNMP
- SNMP
- SNMP
- SNMP
- 网页制作中遇到的一些问题及解决方案
- Qt 的QString类的使用
- 原码、反码、补码和为什么char类型的范围是 -128~+127
- 批量去除项目中无用的资源文件
- 远程控制
- Snmp乱码问题
- picasso和Glide加载图片
- 枚举之熄灯问题
- 目前c语言程序员普遍月收入是多少
- CSS3选择器
- Python设计模式——装饰模式(Decorator)
- 搭建electron开发环境
- c语言程序设计
- java使用递归和非递归实现二分查找