emf使用unicode保存其中文字,规范中说明使用utf16le,在linux上使用inkscape打开文件时发现文字乱码,图像正确,文件在window上画图打开正确,使用libemf2svg转换为svg后,svg里面也是乱码,使用libuemf(图1)读取内容时也是乱码,猜测字体或者编码问题,libuemf代码中发现如果使用unicode的话,先转utf8,设断点查看内存,对应的内容无论使用utf8 utf16 gbk解码都不对,查看emf规范,发现text对象存在flag(图2 图3 图4)字段,关于ETO_GLYPH_INDEX标志微软官网说明是ETO_GLYPH_INDEX: This bit indicates that the codes for characters in an output text string are indexes of the character glyphs in a TrueType font. Glyph indexes are font-specific, so to display the correct characters on playback, the font that is used MUST be
identical to the font used to generate the indexes.说明文字中使用的index而不是文字对应的编码,这个是window系统特有,linux上的inkscape和libuemf没有ETO_GLYPH_INDEX这个的实现,所以在转码时把index当作utf16进行解码,因此出现乱码
![11ef54f7f2df4385a04b6a2285a0f847.png](https://i-blog.csdnimg.cn/direct/11ef54f7f2df4385a04b6a2285a0f847.png)
图1
图2
![8d27ad2c88b740358e671aacfcec8635.png](https://i-blog.csdnimg.cn/direct/8d27ad2c88b740358e671aacfcec8635.png)
图3
![a90ae946ab7c4b539b664a4b67b74bfc.png](https://i-blog.csdnimg.cn/direct/a90ae946ab7c4b539b664a4b67b74bfc.png)
图4