MSVC Windows 版本不支持中文文件名
Xornent opened this issue · comments
MSVC 编译 Windows 版本的 ncmdump 不支持中文文件名。如果通过直接输入给出文件名,出现如下异常
PS D:\> ./ncmdump "<path>\中文.ncm"
Unexpected exception while processing file:
使用 -d
指定的文件夹中如果包含纯英文文件和含有中文的文件,中文文件会被直接忽略而不产生异常
应该是没有问题的呀,之前的版本已经修复了这个bug了。或者可否将文件样本发上来
不好意思刚才的文件传不上来,我把它放在了这个链接里,这是中文 NCM 文件,直接更改它的文件名换成英语就是正常的。
https://files.cnblogs.com/files/xornent/ncms.zip?t=1708094252&download=true
类似问题,目前最新源码仍存在bug。
不过单文件没事,而文件夹不行。
我在文件 src\main.cpp 第94行 改成 processFilesInFolder(fs::u8path(argv[i + 1]));
能暂时解决我本机的问题。
初步debug,是utf8的argv转成fs::path之后,变成了2个字节的utf8。但是fs::directory_iterator调用了系统api,需要UTF16格式的字符串。所以无法识别,导致查找文件夹失败。
所以套个fs::u8path(),将utf8的argv转成系统所需的fs::path就好了。
系统win11 64位 英文版。
类似问题,目前最新源码仍存在bug。 不过单文件没事,而文件夹不行。 我在文件 src\main.cpp 第94行 改成 processFilesInFolder(fs::u8path(argv[i + 1])); 能暂时解决我本机的问题。 初步debug,是utf8的argv转成fs::path之后,变成了2个字节的utf8。但是fs::directory_iterator调用了系统api,需要UTF16格式的字符串。所以无法识别,导致查找文件夹失败。 所以套个fs::u8path(),将utf8的argv转成系统所需的fs::path就好了。 系统win11 64位 英文版。
已更新代码