Java 如何将字节数组转换为字符串,同时保留所有"&引用;?

Java 如何将字节数组转换为字符串,同时保留所有"&引用;?,java,encoding,character-encoding,binary,byte,Java,Encoding,Character Encoding,Binary,Byte,我正在尝试将字节数组转换为字符串。这是包含“www.google.ca”的udp数据包的一部分 为什么我得到的是“www.google.ca”而不是“www.google.ca” 在Eclipse中,我甚至看到: 我尝试了许多字符集,但似乎找不到我做错了什么 提前谢谢大家, Guillaume字节数组不包含www.google.ca 相反,它看起来像是包含三个独立的字符序列,其中每个序列的前缀是一个字节,该字节包含序列的长度(以字节为单位)。这是一种以二进制数据包形式发送字符串的格式 所以你得到

我正在尝试将字节数组转换为字符串。这是包含“www.google.ca”的udp数据包的一部分

为什么我得到的是“www.google.ca”而不是“www.google.ca”

在Eclipse中,我甚至看到:

我尝试了许多字符集,但似乎找不到我做错了什么

提前谢谢大家,


Guillaume

字节数组不包含www.google.ca

相反,它看起来像是包含三个独立的字符序列,其中每个序列的前缀是一个字节,该字节包含序列的长度(以字节为单位)。这是一种以二进制数据包形式发送字符串的格式

所以你得到了3万维网6谷歌2 ca

我的猜测是,您应该将每个字符串识别为DNS名称组件,并将它们自己组装成一个点分隔的字符串

你有一个很好的UDP数据包的规范吗?这应该有更多的信息


(我看到您正在尝试回答DNS请求。DNS协议记录在RFC中:数据包的QNAME部分与您找到的内容相对应。)

您是如何得出
QDNBARRY
的内容的?一个点应该是
46
6
2
从何而来?看看你的字节数组。这些“点”实际上都不是点。你用的是什么编码?查找
3
6
2
,看看这些字符是什么。我正在运行一个本地自制的java dns服务器(学校作业)。然后使用cmd,我对www.google.ca进行了nslookup,并对包含限定域名的部分(www.google.ca)进行了筛选。谢谢@antlesoft,现在这很有意义!
byte[] QDNBArray = [3, 119, 119, 119, 6, 103, 111, 111, 103, 108, 101, 2, 99, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

String s = new String(QDNBArray, "UTF-8");