使用OpenXML从Word模板生成docx时■符号显示为?的求助
解决OpenXML中Word书签插入■符号显示为?的问题
问题根源在于OpenXML对Unicode特殊字符的默认处理逻辑,以及字体对该符号的支持性,以下是具体解决方案:
1. 强制保留特殊字符
OpenXML的Text元素默认会过滤或转换非ASCII字符,导致■丢失。需为Text对象设置Space属性为SpaceProcessingModeValues.Preserve,强制保留字符:
Run run = new Run(); if (runProperties != null) { run.AppendChild(runProperties); } // 修改Text初始化代码,添加Space属性 run.AppendChild(new Text(value) { Space = SpaceProcessingModeValues.Preserve });
2. 指定支持该符号的字体
若模板字体不支持■(Unicode编码U+25A0),即使字符正确也会显示为问号。可在RunProperties中添加支持该字符的字体(如宋体、微软雅黑):
Run run = new Run(); if (runProperties == null) { runProperties = new RunProperties(); } // 配置支持Unicode字符的字体 runProperties.AppendChild(new Fonts() { Ascii = "SimSun", HighAnsi = "SimSun", EastAsia = "SimSun" }); run.AppendChild(runProperties); run.AppendChild(new Text(value) { Space = SpaceProcessingModeValues.Preserve });
3. 确保字符编码正确
直接使用Unicode转义字符赋值value,避免编码错误导致字符异常:
string value = "\u25A0"; // 直接使用■的Unicode编码值
内容的提问来源于stack exchange,提问作者Brad Huang
相关产品推荐
相关产品推荐

