我正在接收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