关于C语言从utf8文件里获取字符串,无法应用的问题,求大佬指点,谢谢!
本帖最后由 xtvott 于 2021-8-5 11:36 编辑事情是这样的,本人从某二次元网站下了周杰伦的高清MV,很高兴的拷到了电脑里面来,利用ffmpeg将视频与音频合并后,准备重命名。
可是一翻目录,一百多个文件,妈耶,瞬间就想到了编程去解决问题(合并文件用批处理愉快的解决了)。先用批处理,文件内容也读出来了,指定的title也读出来了,可卡在了ren命令上,如图
事实上,后续手动打命令是可以更名的,也可以包含空格,但就是不能使用从文件里读出的字符串
没办法,准备使用万能的C(因个人癖好,使用vc6.0,文件后缀为.c)
前面获取路径,字符串拼接等一切顺利,可又卡在了从entry.json文件内读出的文件名上。不使用chcp 65001吧,一团乱码
使用chcp65001吧,又会把我路径中的中文给吞掉。在使用printf的时候简直认为出了灵异事件。
左右尝试了很多,资料也查了很多,耐何对字符编码集没有研究,看各位大佬能给点简单好用的方法,或者成品function来用一下么,感激不尽{:1_893:}{:1_893:}{:1_893:}
为了避免说不会用ren命令,附图一张- -!
上面powershell的命令显示了用手动更名的效果。中间的cmd是批处理开启回显的全过程,下面是精简版。。。。可以看到,手动是没任何问题的,但一使用批处理变量就会出问题。不在于有没有用双引号。。再附上批处理源码,有兴趣的同学可以在B站自己缓存个视频到手机里,拷到电脑里尝试一下:
@echo off
setlocal enabledelayedexpansion
chcp 65001
For /F "Delims=}}" %%i In (entry.json) Do (
set str=%%i
)
set tt=%str:"= %
set tt="!tt:~-21,-1!.mp4"
echo %tt%
ren ./output.mp4 %tt%
pause
Sashka 发表于 2021-8-4 22:16
如果只是做重命名,推荐使用python大法
主要是python打包成exe不会:'(weeqw xtvott 发表于 2021-8-4 22:30
主要是python打包成exe不会
pip install pyinstaller
然后打包方法网上一搜一大堆 yxn4065 发表于 2021-8-4 22:38
pip install pyinstaller
然后打包方法网上一搜一大堆
那还是等于重新学一回python。。。问题是现在核心问题卡在这儿了,要是python也卡在这,那不就白折腾一翻了嘛。。 用Java或者go呀,Python也不错,c语言啥都要你自己考虑好才行 rename 第二参数不能带路径,纯文件名;
命令行ffmpeg不是可以指定输出文件名吗? rename后的新旧文件夹路径,全部用半角双引号框起来
例如
rename "H:\xxxx\xxxx\output.mp4" "H:\xxxx\xxxx\文件名.mp4"
wangyujie96 发表于 2021-8-5 02:14
rename 第二参数不能带路径,纯文件名;
命令行ffmpeg不是可以指定输出文件名吗?
ffmpeg是合并视频,但合并之后要要从json文件中提取文件名进行更改,否则只能一首首听才知道名字。。。我太难了 这个要看你是否定义了_UNICODE,如果定义了,在使用重命名API(MoveFile或rename)时要用unicode版本的。如果没有定义,要用WideCharToMultiByte把读取的字符串转换成ansi字符串