LinkedIn API创建带提及UGC帖子时含表情/重音字符报share commentary invalid错误
问题原因
你遇到的报错本质是提及属性的位置计数规则不匹配LinkedIn API要求:
启用提及功能时,shareCommentary.attributes参数中的start(提及起始位置)和length(提及内容长度)必须严格按照UTF-16代码单元计数,而你当前使用的是普通字符串长度(单字节长度/Unicode码点长度)计数规则。
带重音的特殊字符、大部分表情符号都会占用2个及以上UTF-16代码单元,会导致你计算的起始位置、长度和实际文本不匹配,API校验不通过就返回share commentary is invalid错误;没有特殊字符时两种计数规则结果一致,所以可以发布成功。未启用提及功能时API不需要校验位置参数,所以所有内容都可以正常发布。
比如你示例请求里的文本Hellóó Stackoverflow,Stackoverflow的首字母实际对应的UTF-16起始位置是9,你填的8就是偏移错误,直接导致校验失败。
解决方法
- 替换所有提及相关的位置、长度计算逻辑,统一使用UTF-16代码单元作为计数单位,不同开发语言的实现参考:
- PHP:将字符串转为UTF-16编码后计算长度/位置,或使用
mb_strlen($text, 'UTF-16LE')相关方法计算 - JavaScript:直接使用字符串原生
length属性即可,JS默认按UTF-16代码单元计数 - Python:通过
len(待计算字符串.encode('utf-16-le')) // 2计算对应位置的UTF-16单元数
- 提交请求前额外做范围校验,确保
start + length不超过文本总UTF-16单元长度,避免出现越界错误 - 用你之前发布失败的两个案例重新计算位置后测试,确认可正常发布即可。
内容的提问来源于stack exchange,提问作者Linesofcode
相关产品推荐
相关产品推荐

