我正在接收UDP Java应用程序中的ByteBuffers。从ByteBuffer获取多种语言的数据
现在这个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数据库的一切设置为UTF8。
如果我在Windows中运行应用程序,那么显示特殊字符如®,但中文不是。
添加VM参数-Dfile.encoding = UTF8 chinese会显示,但字符如®显示为?等等。
请帮忙。
编辑:
在UDP分组输入字符串是可变长度字节的字段,编码UTF-8,由0×00
对于JDBC终止也我使用了useUnicode =真&的characterEncoding = UTF -8
即使使用-Dfile.encoding = UTF8作为VM参数,它是否也需要? – User1234 2012-08-16 12:08:38
是的。不要使用这个VM参数,它与使用**新字符串(remainingBytes,“UTF-8”); **和** dataString.getBytes(“UTF-8”)**中文字符显示正确无关 – artbristol 2012-08-16 12:12:46
。 但是®不显示! – User1234 2012-08-16 12:38:14