vtk 解决含有中文路径的TIFF文件读取失败的问题
一、问题描述
二、vtk 源码
三、解决方案
问题描述
环境:VTK 9.2.6 Qt :5.15.2 VS:2019 com
现象:
在使用VTK 打开含有中文路径的tif文件时,vtkTIFFreader对象的 reader->CanReadFile() 返回值一直是零,导致文件无法加载。
将其转换为 wstring 再转换为 string 亦无法实现。
vtk 源码
经查看源码,vtk 使用LibTIFF 作为打开tiff文件的工具,同时vtk为了兼容跨平台编写了系统文件状态检测工具。
首先检测文件状态,我的编译环境满足
含有中文路径的文件 LibTiff 可以通过 qstring.toLocal8Bit().toStdString()的方式成功加载,但是无法通过int SystemTools::Stat() 函数的检测。
含有中文路径的文件可以通过 :
std::wstring wstrpath = path.toStdWString();
std::string strpath = vtksys::Encoding::ToNarrow(wstrpath);
但是LibTIFF无法打开,导致加载文件失败。
总结起来还是编码的问题,我真的很烦,我搞了很久一直搞不清楚这些编码的关系。
解决方案
简单粗暴,修改源码将其修改为支持宽字节的方式
重新编译,来个测试。
打完收工 & 大佬们还有没有更优雅的解决方案,求赐教。