Cloudant java 个非拉丁字符
Cloudant java non-latin characters
我在尝试使用带有希腊字符的 Cloudant java 客户端时遇到困难。保存包含带有希腊字符的字符串的对象似乎工作正常,因为它们在 Cloudant 控制台中正确显示。下面是一个最小的测试用例。 DummyObject 有一个字符串名称、一个 _id 和一个 _rev。
String password = "xxxx";
CloudantClient client = new CloudantClient("xx", "xxx", password);
Database database = client.database("mydatabase", false);
DummyClass dummyobject = new DummyClass();
dummyobject.setName("ά έ ό ύ αβγδεζηθικλμνξ");
Response saveResponse = database.save(dummyobject);
String id = saveResponse.getId();
String result=new String();
DummyClass loaded = database.find(DummyClass.class,id);
result = result+"Object:"+loaded.getName()+"\n"; //Prints out garbage
result = result+"UTF-8:"+new String(loaded.getName().getBytes(),Charset.forName("utf-8"))+"\n"; //Prints most characters correct, except for some accented ones
InputStream inputStream = database.find(id);
DummyClass loadedFromStream = Json.fromJson(Json.parse(inputStream), DummyClass.class);
result = result+"From Stream:"+loadedFromStream.getName(); //prints out fine
return ok(result);
通过检索流并使用 Jackson 反序列化,输出是正确的,但是我必须实现许多提供的视图、批量文档操作等方法。
也许问题出在 LightCouch 库中,特别是这里:CouchDbClientBase.java,因为这是我发现两个实现之间的不同点 (get() 作为对象和流)。但是,我不知道如何确认、修复或解决它。
问题确实出在 LightCouch library。对视图代码进行以下更改和相应更改,修复它。
return getGson().fromJson(new InputStreamReader(in), classType);
至
return getGson().fromJson(new InputStreamReader(in, Charset.forName("UTF-8")), classType);
我们在 1.1.0 版本中修复了这个问题,我认为:
https://github.com/cloudant/java-cloudant/releases/tag/1.1.0
[FIX] Fixed handling of non-ASCII characters when the platform's default charset is not UTF-8.
我在尝试使用带有希腊字符的 Cloudant java 客户端时遇到困难。保存包含带有希腊字符的字符串的对象似乎工作正常,因为它们在 Cloudant 控制台中正确显示。下面是一个最小的测试用例。 DummyObject 有一个字符串名称、一个 _id 和一个 _rev。
String password = "xxxx";
CloudantClient client = new CloudantClient("xx", "xxx", password);
Database database = client.database("mydatabase", false);
DummyClass dummyobject = new DummyClass();
dummyobject.setName("ά έ ό ύ αβγδεζηθικλμνξ");
Response saveResponse = database.save(dummyobject);
String id = saveResponse.getId();
String result=new String();
DummyClass loaded = database.find(DummyClass.class,id);
result = result+"Object:"+loaded.getName()+"\n"; //Prints out garbage
result = result+"UTF-8:"+new String(loaded.getName().getBytes(),Charset.forName("utf-8"))+"\n"; //Prints most characters correct, except for some accented ones
InputStream inputStream = database.find(id);
DummyClass loadedFromStream = Json.fromJson(Json.parse(inputStream), DummyClass.class);
result = result+"From Stream:"+loadedFromStream.getName(); //prints out fine
return ok(result);
通过检索流并使用 Jackson 反序列化,输出是正确的,但是我必须实现许多提供的视图、批量文档操作等方法。
也许问题出在 LightCouch 库中,特别是这里:CouchDbClientBase.java,因为这是我发现两个实现之间的不同点 (get() 作为对象和流)。但是,我不知道如何确认、修复或解决它。
问题确实出在 LightCouch library。对视图代码进行以下更改和相应更改,修复它。
return getGson().fromJson(new InputStreamReader(in), classType);
至
return getGson().fromJson(new InputStreamReader(in, Charset.forName("UTF-8")), classType);
我们在 1.1.0 版本中修复了这个问题,我认为:
https://github.com/cloudant/java-cloudant/releases/tag/1.1.0
[FIX] Fixed handling of non-ASCII characters when the platform's default charset is not UTF-8.