Windows下Python subprocess调用yt-dlp无法获取非ASCII字符
解决Windows下yt-dlp重定向/Subprocess调用丢失韩文的问题
问题原因
yt-dlp直接输出到CMD终端时,会自动适配当前终端的代码页(比如你设置的949)显示韩文,但当输出被重定向到文件或通过Python subprocess调用时,它不会自动切换到通用编码(如UTF-8),而是沿用终端代码页的编码逻辑,导致韩文字符无法被文件或Python正确解析,最终显示为空格。
echo命令正常是因为Windows CMD对echo的重定向编码处理逻辑和yt-dlp不同,会自动适配输出场景;而直接下载时文件名正常,是因为yt-dlp处理文件名采用了独立的编码适配逻辑,不受终端输出编码设置影响。
解决方案
1. CMD重定向到文件时的处理
在yt-dlp命令中添加--encoding utf-8参数,强制输出UTF-8编码内容:
yt-dlp --flat-playlist -i --encoding utf-8 --print title PLySOINx0fqvYr6s8aGdqaK9j8_CAWcP5U > output.txt
打开output.txt时选择UTF-8编码即可正常查看韩文。
2. Python Subprocess调用时的处理
同样添加--encoding utf-8参数,并在subprocess中指定UTF-8编码接收输出:
import subprocess cmd = [ 'yt-dlp', '--flat-playlist', '-i', '--encoding', 'utf-8', '--print', 'title', 'PLySOINx0fqvYr6s8aGdqaK9j8_CAWcP5U' ] result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8') # 打印或处理结果 print(result.stdout)
额外说明
之前切换代码页65001(UTF-8)无效,是因为即使终端代码页设为UTF-8,yt-dlp在非终端输出场景下仍可能未正确适配,手动指定--encoding utf-8是最直接可靠的方式。
内容的提问来源于stack exchange,提问作者S.M.
相关产品推荐
相关产品推荐

