Я работаю над интеграцией Google Docs API с бэкэндом Java.У меня есть пустые Документы Google, и я пытаюсь вставить в этот документ несколько фрагментов текста.Итак, у меня есть многочисленные запросы на вставку текста.
У меня проблема, когда двухбайтовый символ Unicode (смайлик) является первым символом в тексте, а затем я пытаюсь вставить перед ним.
Для этого примера я использую "a"
и "?"
.Если я попытаюсь сначала вставить "a"
, а затем "?"
.Текстовые запросы на вставку:
{
requests=[
{insertText={location={index=1}, text=?}},
{insertText={location={index=1}, text=a}}
]
}
Java-код для создания этих запросов.
private List<Request> createRequests() {
List<Request> requests = new ArrayList<>();
requests.add(job.createInsertTextRequest(1, "?"));
requests.add(job.createInsertTextRequest(1, "a"));
return requests;
}
Я получаю этот ответ об ошибке.
Response Body: {
"error": {
"code": 400,
"message": "Invalid requests[1].insertText: The insertion index cannot be within a grapheme cluster.",
"status": "INVALID_ARGUMENT"
}
}
Если я изменю порядок символов и вставлю "?"
, а затем "a"
.
{
requests=[
{insertText={location={index=1}, text=a}},
{insertText={location={index=1}, text=?}}
]
}
Работает и вставляет "?a"
в документ.
Примечание.Я следую предложению вставлять в обратном порядке (https://developers.google.com/docs/api/how-tos/move-text)
Упростите вопросы, написав в обратном порядке. Чтобы избежать необходимости пересчитывать эти изменения смещения, прикажите вставкам «писать в обратном направлении»: doвставка по индексу с наибольшим номером сначала идет к началу с каждой вставкой. Этот порядок гарантирует, что смещения каждой записи не будут затронуты предыдущими.
Обходной путь - добавлениелишний пробел перед символом смайлика. Есть ли лучший подход?