vtk 解决读取含有中文路径的TIFF文件

发布时间 2023-08-18 14:06:02作者: QricZhang

一、问题描述

二、vtk 源码

三、解决方案

问题描述

环境:VTK 9.2.6 Qt :5.15.2 VS:2019 com
现象:
在使用VTK 打开含有中文路径的tif文件时,vtkTIFFreader对象的 reader->CanReadFile() 返回值一直是零,导致文件无法加载。
将其转换为 wstring 再转换为 string 亦无法实现。

vtk 源码

经查看源码,vtk 使用LibTIFF 作为打开tiff文件的工具,同时vtk为了兼容跨平台编写了系统文件状态检测工具。
image

首先检测文件状态,我的编译环境满足
image
含有中文路径的文件 LibTiff 可以通过 qstring.toLocal8Bit().toStdString()的方式成功加载,但是无法通过int SystemTools::Stat() 函数的检测。
含有中文路径的文件可以通过 :
std::wstring wstrpath = path.toStdWString();
std::string strpath = vtksys::Encoding::ToNarrow(wstrpath);
但是LibTIFF无法打开,导致加载文件失败。
总结起来还是编码的问题,我真的很烦,我搞了很久一直搞不清楚这些编码的关系。

解决方案

简单粗暴,修改源码将其修改为支持宽字节的方式
image

重新编译,来个测试。
打完收工 & 大佬们还有没有更优雅的解决方案,求赐教。