我在 UDP Java 应用程序中接收 ByteBuffers。
现在,这个 ByteBuffer 中的数据可以是任何语言的任何字符串或任何以零分隔的特殊字符。
我使用以下代码从中获取字符串。
public String getString() {
byte[] remainingBytes = new byte[this.byteBuffer.remaining()];
this.byteBuffer.slice().get(remainingBytes);
String dataString = new String(remainingBytes);
int stringEnd = dataString.indexOf(0);
if(stringEnd == -1) {
return null;
} else {
dataString = dataString.substring(0, stringEnd);
this.byteBuffer.position(this.byteBuffer.position() + dataString.getBytes().length + 1);
return dataString;
}
}
这些字符串存储在 MySQL DB 中,所有内容都设置为UTF8。
如果我在 Windows 中运行应用程序,则会显示像 ® 这样的特殊字符,但不会显示中文。
在添加 VM 参数时 -Dfile.encoding=UTF8显示中文,但像 ® 这样的字符显示为 ?? 等等
请帮忙。
编辑:
UDP 数据包中的输入字符串是可变长度字节字段,以 UTF-8 编码,以 0x00 结尾
对于 JDBC,我也使用useUnicode=true&characterEncoding=UTF-8