我致力于将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)
的建议通过向后书写来简化事务。避免必须预先计算 这些偏移量更改后,命令您的插入内容“向后写”: 首先按最高编号的索引插入,按您的方式进行 每次插入时都应从头开始。此顺序可确保 每次写入的偏移量都不受先前偏移量的影响。
一种解决方法是在表情符号字符前添加一个额外的空间。 有没有更好的方法?