Я получаю ByteBuffers в приложении UDP Java.Получить многоязычные данные от 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 отображаются китайцы, но символы, подобные ®, показаны как? и т.д.
Пожалуйста, помогите.
Редактировать:
входных строк в пакете UDP являются с переменной длиной поля байт, закодированные в UTF-8, останавливали 0x00
Для JDBC также я использовать useUnicode = истина & characterEncoding = UTF -8
Нужно ли даже при использовании -Dfile.encoding = UTF8 в качестве аргумента VM? – User1234
Да. Не используйте этот аргумент виртуальной машины, это не относится к – artbristol
при использовании ** новой строки (оставшиеся байты, «UTF-8»); ** и ** dataString.getBytes («UTF-8») ** китайский символ отображается правильно , Но ® не отображается! – User1234