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.