Google Docs API插入文本请求失败以产生图释

时间:2019-07-11 18:04:01

标签: java google-docs google-docs-api

我致力于将Google Docs API与Jav​​a后端集成。我有一个空的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

的建议
  

通过向后书写来简化事务。避免必须预先计算   这些偏移量更改后,命令您的插入内容“向后写”:   首先按最高编号的索引插入,按您的方式进行   每次插入时都应从头开始。此顺序可确保   每次写入的偏移量都不受先前偏移量的影响。


一种解决方法是在表情符号字符前添加一个额外的空间。 有没有更好的方法?

0 个答案:

没有答案