我将以下字节数组从 Java 应用程序发送到 Vb.Net 应用程序:
byte[] buffer = "<CMD>{§}SETUP US THE BOMB".getBytes("UTF-16LE");
下面是Vb.Net端如何将数组解析为字符串:
Dim result as String = (New System.Text.UnicodeEncoding(False, False)).GetString(buffer)
之后,我将生成的字符串记录到控制台(字节转储在到达时在 VB.Net 上完成):
HEX: 60 0 67 0 77 0 68 0 62 0 123 0 167 0 125 0 83 0 69 0 84 0 85 0 80 0 32 0 85 0 83 0 32 0 84 0 72 0 69 0 32 0 66 0 79 0 77 0 66 0
STR: <CMD>{§}SETUP US THE BOMB
如果我不使用 eclipse 并且编码似乎以某种方式损坏,则接收到的字节数组会有所不同...
HEX: 60 0 67 0 77 0 68 0 62 0 123 0 239 0 191 0 189 0 125 0 83 0 69 0 84 0 85 0 80 0 32 0 85 0 83 0 32 0 84 0 72 0 69 0 32 0 66 0 79 0 77 0 66 0
STR: <CMD>{�}SETUP US THE BOMB
当我从开发切换到实际使用代码时,Java 端似乎发生了一些事情。
使用 Udp 传输将字节数组本地发送到 Vb.Net 应用程序。
我使用普通的 java.net.datagramsocket 进行通信。
更新
我也尝试从 Java 获取数组日志,因为我认为这可能会有所帮助:
[D]=Development [P]=Production [J]=Java [R]=Received by Vb.Net
[D][J]: 60 0 67 0 77 0 68 0 62 0 123 0 -89 0 125 0 83 0 69...
[D][R]: 60 0 67 0 77 0 68 0 62 0 123 0 167 0 125 0 83 0 69...
[P][J]: 60 0 67 0 77 0 68 0 62 0 123 0 -17 0 -65 0 -67 0 125 0 83 0 69...
[P][R]: 60 0 67 0 77 0 68 0 62 0 123 0 239 0 191 0 189 0 125 0 83 0 69...
肯定有问题,就好像字符串在发送之前重新编码一样。
最佳答案
这对于正确的评论来说太长了,但这并不是一个真正的答案......
我尝试在 VB .NET 中对字符串进行编码,但没有与您相同的字节:
Dim buf As Byte()
buf = System.Text.UnicodeEncoding.Unicode.GetBytes("<CMD>{§}SETUP US THE BOMB")
结果是:
60 0 67 0 77 0 68 0 62 0 123 0 167 0 125 0 83 0 69 0 84 0 85 0 80 0 32 0 85 0 83 0 32 0 84 0 72 0 69 0 32 0 66 0 79 0 77 0 66 0
而 Java 的缓冲区是:
60 0 67 0 77 0 68 0 62 0 123 0 239 0 191 0 189 0 125 0 83 0 69 0 84 0 85 0 80 0 32 0 85 0 83 0 32 0 84 0 72 0 69 0 32 0 66 0 79 0 77 0 66 0
所以我想说问题来自于 Java 编码,因为该字符应该输出为两个十六进制数字而不是六个......
关于java - .net<->Java 文本编码在开发环境中有效,但在 "production"处失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36990358/