taurusxin / ncmdump

转换网易云音乐 ncm 到 mp3 / flac. Convert Netease Cloud Music ncm files to mp3/flac files.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MSVC Windows 版本不支持中文文件名

Xornent opened this issue · comments

MSVC 编译 Windows 版本的 ncmdump 不支持中文文件名。如果通过直接输入给出文件名,出现如下异常

PS D:\> ./ncmdump "<path>\中文.ncm"
Unexpected exception while processing file:

使用 -d 指定的文件夹中如果包含纯英文文件和含有中文的文件,中文文件会被直接忽略而不产生异常

应该是没有问题的呀,之前的版本已经修复了这个bug了。或者可否将文件样本发上来

好的,这两个文件的区别只有文件名不同,内容是一样的。

不过我猜测有一点有可能会影响这个问题
我这台 Windows 是多语言,我的系统显示语言是英语 en_US,我并没有开启 UTF-8 支持。但是我以往用电脑时经常发现一些中文文件复制到我的机器上时编码是错误的(出现一些乱码),而我的文件在别人的计算机上也会编码错误,但是这不一定,您可以下载这个压缩包看看中文编码是不是不同于常规。

image

如果这个问题只是在我的电脑上出现,我怀疑是这个原因。

不好意思刚才的文件传不上来,我把它放在了这个链接里,这是中文 NCM 文件,直接更改它的文件名换成英语就是正常的。
https://files.cnblogs.com/files/xornent/ncms.zip?t=1708094252&download=true

PixPin_2024-02-16_22-44-07 确实这个文件名的问题在中文操作系统上是没有问题的,是和你的 en_US 语言环境有关。正确的做法是在设置中设置系统显示语言为英文,而在截图中的设置是“Language for non-Unicode programs”,他的意思是非 unicode字符编码,这时你应该设置为中文。和下面是否开启 UTF-8 没有关系。

类似问题,目前最新源码仍存在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位 英文版。

已更新代码