我通過Bluetooth
將.NET應用程序的字符串消息發送到Android Java應用程序。json的GSON無法反序列化 - >包含外來字符的字符串
使用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版本非常相似,其中代替了getter,每個C#編碼約定有properties in pascal case
。
我設法通過 GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);
現在我的問題是straigforward解決GSON的情況下,靈敏度:下面一行將失敗,並拋出一個com.google.gson.JsonSyntaxException: java.io.EOFException
每當我發送包含「非英語」字母的消息。
final Message msg = gson.fromJson(message, Message.class);
其中,消息是一個非空不空的字符串
例:la vie est très belle
(生活很漂亮)
的「入侵者」這裏是法國口音è
。
因此,這裏是堆棧跟蹤的logcat的:
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)
注:我完全相信我的.net應用程序和Android應用程序之間的轉移通過藍牙回&提出的所有數據在UTF-8
進行編碼。
注意二:我測試了多條短信。除了外國信件外,他們都在工作!