snmp4j获取中文乱码问题

原创
2019/09/12 14:43
阅读数 836

在取表、单值、树的时候调用hexToChinese方法传入value和对应的oid,参考下面的调用方法

//----------------------------代码块

import java.util.regex.Pattern;

public class StringUtil {

private static final String[] HEX_SPLIT_STRING = { ":", " " };
private static final String[] CHANGE2CHINESE_OID = { "1.3.6.1.2.1.25.6.3.1.2", // 安装软件名称
		"1.3.6.1.2.1.2.2.1.2", // 端口描述
		"1.3.6.1.2.1.1.5.0", // 系统名称
		"1.3.6.1.2.1.1.1", // 系统描述
		"1.3.6.1.2.1.1.4", // 联系方式
		"1.3.6.1.2.1.25.2.3.1.3", // 系统分区
		"1.3.6.1.4.1.19849.2.8.2", "1.3.6.1.4.1.19849.2.8.3" // 冰之眼内存
};
private static final String Dateoid = "1.3.6.1.2.1.25.1.2.0";

private static boolean isChineseOid(String oid) {
	if (oid == null) {
		return false;
	}
	for (String tmpOid : CHANGE2CHINESE_OID) {
		if (oid.startsWith(tmpOid)) {
			return true;
		}
	}
	return false;
}

public static String hexToChinese(String value, String oid) {
	if (value == null) {
		return null;
	}
	String rex = "([0-9a-fA-F]{4})(((\\.)([0-9a-fA-F]{4})){2})";
	String result = null;
	if (Pattern.matches(rex, value)) {
		value = value.replaceAll("\\.", "");
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < value.length(); i = i + 2) {
			sb.append(value.substring(i, i + 2)).append(" ");
		}
		result = sb.toString().trim();
	} else if (isChineseOid(oid)) {
		result = hexToChinese(value);
	} else if (oid.endsWith(Dateoid)) {
		result = transeSnmp4jDate(value);
	} else {
		if (isHex(value)) {
			value = value.replaceAll(":", " ");
		}
		result = value.trim();
	}
	return result;
}

private static boolean isHex(String value) {
	if (value == null || value.length() == 0) {
		return false;
	}
	for (String splitStr : HEX_SPLIT_STRING) {
		if (value.indexOf(splitStr) >= 0) {
			value += splitStr;
			String rex = "([0-9a-fA-F][0-9a-fA-F][" + splitStr + "])+";
			Pattern p = Pattern.compile(rex);
			if (p.matcher(value).matches()) {
				return true;
			}
		}
	}
	return false;
}

public static String toStringHex2(String octetString) {
	try {
		String[] temps = octetString.split(":");
		byte[] bs = new byte[temps.length];
		for (int i = 0; i < temps.length; i++)
			bs[i] = (byte) Integer.parseInt(temps[i], 16);

		return new String(bs, "GB2312");
	} catch (Exception e) {
		return null;
	}
}

private static String hexToChinese(String value) {
	if (value == null) {
		return null;
	}
	String hexString = value.trim();
	if (!isHex(hexString)) {
		return hexString;
	}
	return toStringHex2(value);
}

private static String transeSnmp4jDate(String value) {
	if (value == null) {
		return null;
	}
	String tmp[] = null;
	if (value.indexOf(":") >= 0) {
		tmp = value.split(":");
	} else {
		tmp = new String[1];
		tmp[0] = value;
	}
	StringBuffer sb = new StringBuffer();
	sb.append(Integer.parseInt(tmp[0] + tmp[1], 16));
	sb.append("/");
	sb.append(Integer.parseInt(tmp[2], 16));
	sb.append("/");
	for (int i = 3; i < tmp.length - 1; i++) {
		sb.append(Integer.parseInt(tmp[i], 16));
		if (i < tmp.length - 2) {
			if (i == 3 && Integer.parseInt(tmp[4], 16) < 12) {
				sb.append(" ");
			} else if (i == 3 && Integer.parseInt(tmp[4], 16) >= 12) {
				sb.append(" ");
			} else {
				sb.append(":");
			}
		}
	}
	return sb.toString().trim();
}
}
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部