opencascade解析step文件的编码bug

opencascade是一个很老旧的cad库,对于step的解析过程,尤其对于非ascii编码的step文件,在解析的时候会偶尔出现莫名的bug。

我经过了2天的调试,测试,发现这个些bug来源于零部件名称中的0x80编码。凡是step文件中的字符串类型的token如果出现了0x80编码就会解析出错。例如utf8编码的汉字“总”,“总”这个字的utf8编码为/xe6/x80/xbb 。含有0x80编码,因此含有这个字的utf8编码的step文件都会在opencascade中解析出错。为此我专门购买了step文件的2002标准文档。2002标准只解析到了latin-1编码,latin-1中的0x80是未定义的,可能这是问题的根源。step文件的2016标准才支持utf8,由此推测opencascade的step文件解析器只实现了2002标准。

针对此问题,为了正确的解析step文件中的非ascii码,我们提出了“字符替换”方案。在调用opencascade前,先对step文件做一次预处理,将ascii码全部替换掉。替换的数据保存起来,在需要的时候再调回来使用。此解决方案已经使用于cadparser项目中。