Я отправляю строковые сообщения из приложения .NET через Bluetooth
в приложение Java Java.GSON fromJson не может десериализовать -> строки, содержащие иностранные символы
Использование Newtonsoft JSON.NET
Я сериализую свои сообщения в JSON
и отправляю их как есть в приложении для Android, которое пытается их конвертировать с Gson
.
Это мой класс сообщений:
public final class Message {
private final String content;
private final String address;
private final long timeStamp;
private boolean isRead;
private boolean isSent;
public Message(final String content, final String address, final long timeStamp,
final boolean isSent, final boolean isRead) {
this.content = content;
this.address = address;
this.timeStamp = timeStamp;
this.isSent = isSent;
this.isRead = isRead;
}
public final String getContent() {
return this.content;
}
public final String getAddress() {
return this.address;
}
public final boolean isRead() {
return this.isRead;
}
public final boolean isSent() {
return this.isSent;
}
public final long getTimeStamp() {
return this.timeStamp;
}
}
Как вы можете видеть, ничего фантазии здесь. Версия .NET этого класса довольно похожа, где вместо геттеров есть properties in pascal case
в качестве условных обозначений C#.
мне удалось решить прецедентную чувствительность Gson через GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);
Теперь моя проблема straigforward: следующая строка будет прервана и бросить com.google.gson.JsonSyntaxException: java.io.EOFException
всякий раз, когда я отправляю сообщение, содержащее «не английскую» букву.
final Message msg = gson.fromJson(message, Message.class);
где сообщение является ненулевым не пустой строкой
Exemple: la vie est très belle
(жизнь очень красиво)
«злоумышленник» здесь является французским акцентом è
.
Так вот LogCat из StackTrace:
om.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 94
at com.google.gson.Gson.fromJson(Gson.java:820)
at com.google.gson.Gson.fromJson(Gson.java:775)
at com.google.gson.Gson.fromJson(Gson.java:724)
at com.google.gson.Gson.fromJson(Gson.java:696)
at mackosoft.almightymessage.MainActivity$10.onNewMessageArrived(MainActivity.java:257)
at mackosoft.almightymessage.bluetooth.module.events.BluetoothEventManager.notifyNewMessageArrived(BluetoothEventManager.java:77)
at mackosoft.almightymessage.bluetooth.module.BluetoothManager$2.run(BluetoothManager.java:180)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.io.EOFException: End of input at line 1 column 94
at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1414)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:486)
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:418)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:190)
at com.google.gson.Gson.fromJson(Gson.java:810)
at com.google.gson.Gson.fromJson(Gson.java:775)
at com.google.gson.Gson.fromJson(Gson.java:724)
at com.google.gson.Gson.fromJson(Gson.java:696)
at mackosoft.almightymessage.MainActivity$10.onNewMessageArrived(MainActivity.java:257)
at mackosoft.almightymessage.bluetooth.module.events.BluetoothEventManager.notifyNewMessageArrived(BluetoothEventManager.java:77)
at mackosoft.almightymessage.bluetooth.module.BluetoothManager$2.run(BluetoothManager.java:180)
at java.lang.Thread.run(Thread.java:818)
Примечание: Я сделал, что все данные, передаваемые через Bluetooth назад & вперед между моей .NET приложения и Android приложение кодируется в UTF-8
.
Примечание: Я проверил несколько текстовых сообщений. Все они работали, кроме одного с иностранными письмами!