Cloudant java нелатинские символы


У меня возникли трудности при попытке использовать клиент 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);

Извлекая поток и используя Джексона для десериализации, вывод верен, но тогда мне пришлось бы реализовать многие из предоставленных методов для представлений, bulk манипуляции с документами и т.д.

Возможно, проблема заключается в библиотеке LightCouch, а именно здесь: CouchDbClientBase.java , так как это точка, которую я нашел, отличается между двумя реализациями (get() как объект и как поток). Однако я не знаю, как это подтвердить, исправить или обойти.

2 2

2 ответа:

Мы исправили это в выпуске 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.

Проблема действительно была в библиотекеLightCouch . Сделав следующее изменение и соответствующие изменения в коде для представлений, исправил его.

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

К

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