java读取word中的英语音标(Kingsoft Phonetic Plain字体的)
读取word中的文档遇到了带音标的,Kingsoft Phonetic Plain这种字体在后台打断点看到是一种16进制格式的数据,然后去word中去对应:
这里的字符代码,后台打断点读取到的为f054,所以只需要找到所有Kingsoft Phonetic Plain这种字体的音标,转成16进制,根据16进制去判断对应上正常字体的音标就可以了
代码:
public static void main(String[] args) throws IOException {
Document doc = new Document("C:\\Users\\86156\\Desktop\\1a0eea13-e55a-4b18-9a6c-1223791096c4.docx");
strTo16(doc.getText());
}
public static String strTo16(String s) {
Map map = new HashMap();
map.put("f042", "ɑ");
map.put("f03a", "ː");
map.put("f043", "ɔ");
map.put("f05c", "ɜ");
map.put("f069", "i");
map.put("f075", "u");
map.put("f051", "ʌ");
map.put("f045", "ə");
map.put("f049", "ɪ");
map.put("f04a", "ʊ");
map.put("f065", "e");
map.put("f041", "æ");
map.put("f042", "a");
map.put("f070", "p");
map.put("f074", "t");
map.put("f06b", "k");
map.put("f066", "f");
map.put("f057", "θ");
map.put("f073", "s");
map.put("f062", "b");
map.put("f064", "d");
map.put("f05e", "g");
map.put("f076", "v");
map.put("f054", "ð");
map.put("f07a", "z");
map.put("f046", "ʃ");
map.put("f068", "h");
map.put("f06a", "j");
map.put("f072", "r");
map.put("f056", "ʒ");
map.put("f077", "w");
map.put("f06d", "m");
map.put("f06e", "n");
map.put("f04e", "ŋ");
map.put("f06c", "l");
map.put("f02f", "/");
String str = "";
for (int i = 0; i < s.length(); i++) {
int ch = s.charAt(i);
char res = s.charAt(i);
String s4 = Integer.toHexString(ch);//字符转为16进制
System.out.println(s4);
if (map.containsKey(s4)) {
res = map.get(s4).toString().charAt(0);
}
str = str + res;
}
System.out.println(str);
return str;
}
输出结果