直接在CMD中使用youtube-dl运行命令可以正常工作:
youtube-dl -e "https://www.youtube.com/watch?v=E_JXrNAxGzM"
正确给出了Youtube视频的标题:27/12/2016晚间新闻杨家骏直播睇手机
但是,如果我在Windows批处理文件中使用FOR循环使用相同的命令,则将完全删除非ASCII字符。批处理文件代码:
@ECHO OFF
FOR /F "delims=" %%i IN ('youtube-dl -e "https://www.youtube.com/watch?v=E_JXrNAxGzM"') DO (
ECHO %%i
)
PAUSE
EXIT
仅给出此结果:27/12/2016
作为测试,我尝试了这个:
set var=晚間新聞楊家駿直播睇手機
for %%i in (%var%) do (
echo %%i
)
[可以正常工作并且echos the Chinese characters correctly,这使我相信这不是CMD中的Unicode问题,而是与youtube-dl捆绑在一起。
但是,我已经确定它是not a youtube-dl problem。
我是否缺少某些东西,并且有什么方法可以使它正常工作?
--encoding utf-8
开关似乎在这里与chcp 65001
一起使用(免责声明:仅在win10 v1909下使用带有NSimSun字体的非传统控制台,在ymmv以及其他版本或设置下才尝试使用。)>
C:\etc>chcp 65001 Active code page: 65001 C:\etc>for /f "delims=" %i in ('youtube-dl --encoding utf-8 -e "https://www.youtube.com/watch?v=E_JXrNAxGzM"') do @echo %i 27/12/2016 晚間新聞 楊家駿直播睇手機
________
但是,我确信这不是youtube-dl问题。
向开发人员询问的真正问题是,
youtube-dl
是否对发送到交互式控制台的输出流进行任何检测,而不是对管道文件或重定向文件进行检测,以及是否基于该检测来更改输出编码。我相信答案可能是肯定的,这可以解释直接控制台输出与for
循环之间的区别。