Cloudant java非拉丁字符

时间:2015-01-25 18:47:54

标签: java couchdb gson cloudant

我在尝试使用希腊字符的Cloudant java客户端时遇到了困难。保存包含具有希腊字符的字符串的对象似乎正常工作,因为它们在Cloudant控制台上正确显示。下面是一个最小的测试用例。 DummyObject有一个String名称,一个_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()作为对象和流)。但是,我不知道如何确认,修复或解决它。

2 个答案:

答案 0 :(得分:3)

我们在版本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.

答案 1 :(得分:1)

问题确实在LightCouch library。对视图代码进行以下更改和相应更改,修复它。

return getGson().fromJson(new InputStreamReader(in), classType);

return getGson().fromJson(new InputStreamReader(in, Charset.forName("UTF-8")), classType);