public static void main(String... aArgs) throws IOException{ String s = "\2.\1.domain.com"; System.out.println(filterCtrlChars(s));
} public static String filterCtrlChars(String source){ StringBuffer sf = new StringBuffer(); for (char c : source.toCharArray()){ if (Character.isISOControl(c)){ sf.append("\\") .append(Integer.toOctalString(c)); }else{ sf.append(c); } } return sf.toString(); } 没想到其他好的解决办法,因为string中已经不存在转义符了,已经连同后面的数字转成了8进制
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
env.put(Context.PROVIDER_URL, OID_DNS_SERVER);
String dns_attributes[] = { "NAPTR" }; ctx = new InitialDirContext(env);
Attributes attrs1 = ctx.getAttributes(regexRequest, dns_attributes);
if (attrs1 == null) { } else {
Attribute attr = attrs1.get(dns_attributes[0]);
if (attr != null) {
Enumeration vals = attr.getAll();
if (vals.hasMoreElements()) { //就是这里接收到的DNS数据中包含有 \ 字符,naptrRecord显示的时候被转义了,显示乱码
String naptrRecord = vals.nextElement().toString();
}
}
}
} catch (Exception e) {
}
按正常的字符串解析,java内部会把\变成\\转义的
比如你在网页上输入一个\,java端获得的就是"\\",不可能只获得一个"\"(这样是非法字符串,通不过的),所以估计问题不在这里,看LZ的输出结果,好像是编码不对造成的
记得有人发过帖子说java通信时接收端多了几个非法字符的问题(\ufffd之类的),LZ可以搜索一下看看
有可能,我接收的时候就是乱码了,我在DNS服务器上看了数据确实是 \002.\001.domainname.com ,我一发起请求,返回来接收到的数据中那部分包含 \ 的字符就变成乱码了。DNS服务器的数据不能改,我该怎么进行转换或者怎么读取数据才能避免这个问题?
String s = "\2.\1.domain.com";
System.out.println(filterCtrlChars(s));
} public static String filterCtrlChars(String source){
StringBuffer sf = new StringBuffer();
for (char c : source.toCharArray()){
if (Character.isISOControl(c)){
sf.append("\\")
.append(Integer.toOctalString(c));
}else{
sf.append(c);
}
}
return sf.toString();
}
没想到其他好的解决办法,因为string中已经不存在转义符了,已经连同后面的数字转成了8进制
把\全部替换成\\