Open XML解析Word文档时单词拆分异常问题技术咨询
为啥Word文档里的单词会被拆成两个片段?
嘿,这个问题我之前处理Office Open XML解析时碰到过类似情况,和语言、编码基本没关系,核心原因是Word的文本运行块(<w:r>)拆分逻辑——看你贴的OuterXml片段就能找到明确线索:
对比两个<w:r>的字符属性<w:rPr>:
- 第一个
<w:r>多了个<w:spacing w:val="-1"/>,意思是这段文本的字符间距被设置为紧缩-1 - 第二个
<w:r>没有这个间距属性,但其他格式(加粗、字号、字体、语言设置)完全和第一个一致
Word的规则是:只要文本的局部格式有差异,就会把这部分文本单独拆成一个<w:r>块。这里就是"St"被手动设置了字符紧缩,而后面的"andards"没设,所以Word把它们分成了两个独立的运行块,看起来就像单词被拆成了两半。
额外说明:
- 这种拆分不光出现在字符间距调整,手动给单词部分字母改格式(比如变色、改字号),或者文档从PDF/网页转过来带的格式残留,都会触发Word的这个逻辑。
- 你看两个
<w:r>里的<w:lang>都是en-US,编码也是标准的OOXML格式,完全排除语言和编码的锅。
要是想解析时还原完整单词:
可以做个判断逻辑:如果相邻的<w:r>块,除了这种局部格式差异(比如这里的间距),核心属性(字体、字号、语言、加粗状态)都一致,就可以把它们的<w:t>文本内容合并起来,就能得到完整的"standards"啦。
内容的提问来源于stack exchange,提问作者Felix Cen




