Windows 10下yt-dlp提取非ASCII字符音频遇UnicodeEncodeError求助
解决Windows 10下yt-dlp提取含非ASCII字符音频时的UnicodeEncodeError问题
问题根源
你遇到的UnicodeEncodeError并非文件名限制的问题——因为你设置了download=False,此时yt-dlp仅提取音视频信息,错误源于Windows控制台默认使用的charmap编码(如GBK)无法识别部分非ASCII字符,导致程序输出这些字符时编码失败。
解决方案
1. 强制Python标准输出使用UTF-8编码
在代码开头添加以下语句,让Python输出强制适配UTF-8,避免控制台编码冲突:
import sys if sys.stdout.encoding != 'utf-8': sys.stdout.reconfigure(encoding='utf-8') sys.stderr.reconfigure(encoding='utf-8')
2. 优化yt-dlp配置
- 保留正确的文件名限制参数:只需
'restrict-filenames': True即可,重复的restrictfilenames是旧版冗余参数,无需保留。 - 若不需要控制台输出,可开启静默模式彻底规避编码问题:
ydl_opts = { 'restrict-filenames': True, 'quiet': True, # 禁用所有控制台输出 'no_warnings': True # 可选:禁用警告输出 }
3. 手动处理提取到的非ASCII信息
如果需要使用提取到的信息(如标题),可以手动转义或替换非ASCII字符:
info = ydl.extract_info("ytsearch:%s" % requestedAudio, download=False) # 将非ASCII字符替换为?,再处理Windows文件名禁用字符 processed_title = info['entries'][0]['title'].encode('ascii', 'replace').decode('ascii') processed_title = processed_title.replace('?', '_').replace('/', '_').replace('\\', '_')
内容的提问来源于stack exchange,提问作者mansur ischanov
相关产品推荐
相关产品推荐

