You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:52:05