从docx中提取符号字符

我正在开发一个JAVA程序,它处理docx文件的XML内容并将其转换为特定格式。 它工作得很好,但如果Word文件包含符号字符,例如希腊字母,我会遇到问题。 在这种情况下,我只看到小方块。

我检查了源代码并看到如下内容:

ďˇ 

或者,如果我将编码设置为UTF-8:

  

当我查看为Hexa时,似乎希腊字符编码为EF 81 A1 for alpha, EF 81 A2 for beta等等。

我也尝试了val.getBytes(Charset.forName("utf8")) ,其中val是标签的值。 结果是例如[-17, -127, -95] 。 负面价值对我来说非常令人惊讶。

所以我的问题是,将这些符号转换为常规UTF-8字符的安全可靠方法是什么?

同时,我找到了解决方案,所以我将其添加为答案以供将来参考。

我使用字形查看器软件检查了Symbol字体,我意识到它使用Unicode的私有使用区域作为其字符。 Times New Roman等其他字体存储正常Unicode范围内的相关字符(例如希腊字母)。

因此,解决方案是使用标准Unicode字形映射Symbol字形。 我已经为Symbol字体中的希腊字母(大/小写),标点符号,数字和数学符号手动创建了一个转换表。 请注意,即使variuos范围内的字符顺序也彼此不同,例如希腊字母表在符号和Unicode中的顺序不同。 所以我不得不逐个检查字符代码。

当我有转换表时,我将其存储在一个txt文件中。 当我的应用程序在Word文件中找到一个段(运行)时,该文件使用符号字体格式化(示例中为标记),它会调用转换方法。 在这个方法中,我将txt文件解析为HashMap ,并将符号从Symbol代码逐个更改为Unicode:

 public String convert(String symbolString) { StringBuilder sb = new StringBuilder(); for(int k=0; k 

其中conversionTable是包含替换代码为hex值的HashMap对象。