#1395 UnicodeEncodeError: 'ascii' codec can't encode character '\uff1a' in position 14: ordinal not in range(128)

60.163* Posted at: 2 hours ago 👁33

无效的值或参数:'ascii' codec can't encode character '\uff1a' in position 14: ordinal not in range(128):Traceback (most recent call last):
File "videotrans\translator\_base.py", line 80, in run
File "videotrans\translator\_base.py", line 143, in _run_srt
File "tenacity\__init__.py", line 338, in wrapped_f
File "tenacity\__init__.py", line 477, in call
File "tenacity\__init__.py", line 378, in iter
File "tenacity\__init__.py", line 421, in exc_check
tenacity.RetryError: RetryError[]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "videotrans\util\TestSrtTrans.py", line 19, in run
File "videotrans\translator\__init__.py", line 907, in run
File "videotrans\translator\_base.py", line 83, in run
File "tenacity\__init__.py", line 480, in call
File "videotrans\translator\_localllm.py", line 54, in _item_task
File "openai\_utils\_utils.py", line 286, in wrapper
File "openai\resources\chat\completions\completions.py", line 1156, in create
File "openai\_base_client.py", line 1259, in post
File "openai\_base_client.py", line 968, in request
File "openai\_base_client.py", line 495, in _build_request
File "openai\_base_client.py", line 439, in _build_headers
File "httpx\_models.py", line 156, in init
File "httpx\_models.py", line 82, in _normalize_header_value
UnicodeEncodeError: 'ascii' codec can't encode character '\uff1a' in position 14: ordinal not in range(128)


=
system:Windows-10-10.0.19045-SP0
version:v3.84
frozen:True
language:zh
root_dir:E:/Pyvideotrans

19 Replies

这个错误是由于在向本地部署的大模型发送请求时,请求头或请求体中包含了中文字符(如中文冒号 ),而系统默认的 ASCII 编码无法处理这些字符导致的。

解决方案:

  1. 检查并修改系统区域设置(推荐)

    • 在 Windows 搜索栏输入“区域设置”并打开。
    • 进入 管理 选项卡。
    • 点击 更改系统区域设置...
    • 勾选 “Beta 版:使用 Unicode UTF-8 提供全球语言支持 (U)”。
    • 点击 确定 并重启电脑。
  2. 修改软件高级选项(备用方案)

    • 在 pyVideoTrans 的菜单栏选择 工具/选项 -> 高级选项
    • 在“字幕翻译调整”区域,尝试将 AI翻译每次发送字幕行数 改为 1,以减少单次请求的数据量。
  3. 检查本地模型 API 配置

    • 请确认您在“翻译设置”中配置的本地模型 API 地址(例如 http://localhost:11434/v1)是正确的,并且本地模型服务正在运行。

如果上述方法无效,请提供完整的日志文件(位于软件根目录下的 videotrans/logs/ 文件夹内)以便进一步分析。

区域设置里找不到管理

在 Windows 10 中,您可以通过以下路径找到“更改系统区域设置”的选项:

  1. 在 Windows 搜索栏输入 “控制面板” 并打开它。
  2. 将右上角的“查看方式”更改为 “大图标”“小图标”
  3. 找到并点击 “区域”
  4. 在弹出的窗口中,切换到 “管理” 选项卡。
  5. 点击 “更改系统区域设置...” 按钮。
  6. 勾选 “Beta 版:使用 Unicode UTF-8 提供全球语言支持(U)”
  7. 点击 “确定”,然后根据提示 重启电脑

重启后,再次尝试使用 pyVideoTrans 的翻译功能。

更改了区域设置后重启了还是不行

问题依然存在,这表明错误可能源于软件内部对本地模型API请求的编码处理。请按以下步骤排查:

  1. 检查本地模型服务:首先确认您本地部署的大模型服务(如Ollama)正在运行且API地址(例如 http://localhost:11434/v1)在浏览器中可正常访问。
  2. 修改高级选项:在pyVideoTrans的菜单栏选择 工具/选项 -> 高级选项

    • 在“字幕翻译调整”区域,将 AI翻译每次发送字幕行数 设置为 1。这可以简化请求数据,减少编码问题的触发几率。
  3. 尝试传统翻译渠道:作为临时测试,请将翻译渠道暂时切换为 Google翻译百度翻译 等传统在线渠道,以确认问题是否特定于您的本地模型配置。

如果以上步骤仍无法解决问题,请提供完整的日志文件以便深入分析。日志文件位于软件根目录下的 videotrans/logs/ 文件夹内,请提供最新的那个 .log 文件。

2025-11-10 19:09:36,293 - INFO - Finished call to 'videotrans.translator._localllm.LocalLLM._item_task' after 10.047(s), this was the 3rd time calling it.
self.proxy_str=None
2025-11-10 19:10:37,287 - INFO - 最终配置信息:self.cfg=TaskCfg(cache_folder='E:/Pyvideotrans/tmp9208/a8effc5040', target_dir='K:/_video_out/_video_out/25.6.23.Monkeys with Tom Mison and Katie McGrath', remove_noise=False, is_separate=False, detect_language='en', subtitle_language=None, source_language='英语', target_language='简体中文', source_language_code='en', target_language_code='zh-cn', source_sub='K:/_video_out/_video_out/25.6.23.Monkeys with Tom Mison and Katie McGrath/en.srt', target_sub='K:/_video_out/_video_out/25.6.23.Monkeys with Tom Mison and Katie McGrath/zh-cn.srt', source_wav='E:/Pyvideotrans/tmp9208/a8effc5040/en.wav', source_wav_output='K:/_video_out/_video_out/25.6.23.Monkeys with Tom Mison and Katie McGrath/en.wav', target_wav='E:/Pyvideotrans/tmp9208/a8effc5040/target.wav', target_wav_output='K:/_video
......
:\n - 非翻译内容: 如果某行字幕仅由数字、空格、标点符号或其任意组合构成(例如 ...123-456),则不要翻译。直接将原文复制为译文行,以满足“强制双语格式”规则。\n - 无法翻译的内容: 如果遇到确实无法翻译的文本(如无意义的乱码或特定上下文的专有词),译文行必须是一个空行**。绝不能输出任何解释、注释或错误信息。\n\n# 输出格式\n所有最终结果,即完整的双语SRT内容,都必须被一个 XML 标签严格包裹。除此之外,不要有任何其他多余的文字或解释。\n\n# 输出示例\n`xml\n\n1\n00:00:00,760 --> 00:00:01,256\n原文文本\n英语语言译文文本\n\n2\n00:00:01,816 --> 00:00:04,488\n原文文本\n英语语言译文文本\n\n`\n\n\n\n1\n00:00:00,000 --> 00:00:05,000\n你好啊我的朋友\n'}]
2025-11-10 19:12:01,843 - INFO - Finished call to 'videotrans.translator._localllm.LocalLLM._item_task' after 0.015(s), this was the 1st time calling it.
2025-11-10 19:12:06,859 - INFO - Starting call to 'videotrans.translator._localllm.LocalLLM._item_task', this is the 2nd time calling it.
2025-11-10 19:12:06,859 - INFO -
[localllm]发送请求数据:message=[{'role': 'system', 'content': '您是一名顶级的字幕翻译引擎。'}, {'role': 'user', 'content': '# 角色\n你是一个顶级的SRT字幕翻译引擎,专门负责将SRT字幕精准地翻译成 英语语言。你的核心任务是生成专业、格式严谨的双语对照SRT字幕。\n\n# 核心任务\n处理 标签内的原始SRT字幕,将其翻译成 英语语言,并严格按照下述规则和格式输出。\n\n# 工作流程与规则\n你必须严格遵循以下步骤和规则:\n\n1. **保留结构**: 完整保留原始SRT的序号、时间码(格式为 `00:00:00,000`)以及字幕条目之间的空行。绝不能修改或删除它们。\n\n2. **强制双语格式**: 每个字幕条目必须包含两行文本内容。\n - 第一行:原始字幕文本。\n - 第二行:对应的 英语语言 译文。\n\n3. **翻译风格**:\n - 译文必须通俗易懂、口语化。\n - 优先使用简洁的表达,避免不必要的长句。\n\n4. **特殊内容处理**:\n - **非翻译内容**: 如果某行字幕仅由数字、空格、标点符号或其任意组合构成(例如 `...` 或 `123-456`),则不要翻译。直接将原文复制为译文行,以满足“强制双语格式”规则。\n - **无法翻译的内容**: 如果遇到确实无法翻译的文本(如无意义的乱码或特定上下文的专有词),译文行必须是一个**空行**。绝不能输出任何解释、注释或错误信息。\n\n# 输出格式\n所有最终结果,即完整的双语SRT内容,都必须被一个 XML 标签严格包裹。除此之外,不要有任何其他多余的文字或解释。\n\n# 输出示例\nxml\n\n1\n00:00:00,760 --> 00:00:01,256\n原文文本\n英语语言译文文本\n\n2\n00:00:01,816 --> 00:00:04,488\n原文文本\n英语语言译文文本\n\n\n\n\n\n1\n00:00:00,000 --> 00:00:05,000\n你好啊我的朋友\n'}]
2025-11-10 19:12:06,859 - INFO - Finished call to 'videotrans.translator._localllm.LocalLLM._item_task' after 5.031(s), this was the 2nd time calling it.
2025-11-10 19:12:11,873 - INFO - Starting call to 'videotrans.translator._localllm.LocalLLM._item_task', this is the 3rd time calling it.
2025-11-10 19:12:11,873 - INFO -
[localllm]发送请求数据:message=[{'role': 'system', 'content': '您是一名顶级的字幕翻译引擎。'}, {'role': 'user', 'content': '# 角色\n你是一个顶级的SRT字幕翻译引擎,专门负责将SRT字幕精准地翻译成 英语语言。你的核心任务是生成专业、格式严谨的双语对照SRT字幕。\n\n# 核心任务\n处理 标签内的原始SRT字幕,将其翻译成 英语语言,并严格按照下述规则和格式输出。\n\n# 工作流程与规则\n你必须严格遵循以下步骤和规则:\n\n1. **保留结构**: 完整保留原始SRT的序号、时间码(格式为 `00:00:00,000`)以及字幕条目之间的空行。绝不能修改或删除它们。\n\n2. **强制双语格式**: 每个字幕条目必须包含两行文本内容。\n - 第一行:原始字幕文本。\n - 第二行:对应的 英语语言 译文。\n\n3. **翻译风格**:\n - 译文必须通俗易懂、口语化。\n - 优先使用简洁的表达,避免不必要的长句。\n\n4. **特殊内容处理**:\n - **非翻译内容**: 如果某行字幕仅由数字、空格、标点符号或其任意组合构成(例如 `...` 或 `123-456`),则不要翻译。直接将原文复制为译文行,以满足“强制双语格式”规则。\n - **无法翻译的内容**: 如果遇到确实无法翻译的文本(如无意义的乱码或特定上下文的专有词),译文行必须是一个**空行**。绝不能输出任何解释、注释或错误信息。\n\n# 输出格式\n所有最终结果,即完整的双语SRT内容,都必须被一个 XML 标签严格包裹。除此之外,不要有任何其他多余的文字或解释。\n\n# 输出示例\nxml\n\n1\n00:00:00,760 --> 00:00:01,256\n原文文本\n英语语言译文文本\n\n2\n00:00:01,816 --> 00:00:04,488\n原文文本\n英语语言译文文本\n\n\n\n\n\n1\n00:00:00,000 --> 00:00:05,000\n你好啊我的朋友\n'}]

从日志可以看出,问题出在本地大模型API的请求处理上。虽然系统区域已更改,但软件在构建HTTP请求头时仍然遇到了编码问题。请按以下步骤解决:

  1. 检查本地模型服务状态:首先确认您的本地模型服务(如Ollama)正在运行。在浏览器中访问您配置的API地址(如 http://localhost:11434/v1/models)确认服务正常。
  2. 修改翻译渠道:暂时将翻译渠道从"兼容AI/本地模型"切换到 Google翻译百度翻译 等传统在线翻译渠道,以确认问题是否特定于本地模型配置。
  3. 检查API配置:在菜单-翻译设置-兼容AI/本地模型中,确认API地址格式正确,应为完整的URL,如 http://localhost:11434/v1
  4. 尝试其他AI渠道:如果本地模型持续出现问题,建议使用 DeepSeekGemini 等在线AI翻译渠道,它们通常更稳定。

如果以上方法仍无法解决,请提供更完整的错误日志,特别是包含具体错误堆栈的部分,以便进一步分析编码问题的根源。

API地址是按照模板录入的:https://api.moonshot.cn/v1
密钥也是从moonshot里复制下来的,模型类型:moonshot-v1-8k,模型文本框中按模板输入 moonshot-v1-8k,moonshot-v1-32k,moonshot-v1-128k 之前没升级的版本时一直能用

问题很明确:您配置的是在线API服务(月之暗面Moonshot),而不是本地部署的模型,但软件却错误地将其识别为"本地模型"进行处理,导致了编码冲突。

请按以下步骤修正配置:在菜单栏选择 翻译设置。找到并点击 MoonshotAI 渠道(不是"兼容AI/本地模型")。在MoonshotAI的设置界面中,正确填写:API Key:您的Moonshot密钥模型名称:moonshot-v1-8k(或其他您选择的模型)返回主界面,在翻译渠道下拉菜单中选择 MoonshotAI(而不是"兼容AI/本地模型")。

重要说明:"兼容AI/本地模型"渠道专门用于本地部署的模型(如Ollama、OpanAI兼容API),而Moonshot、DeepSeek、OpenAI等在线服务都有各自独立的渠道配置。配置正确后,编码问题应该会自然解决。

翻译设置中没有找到MoonshotAI 渠道

您说得对,pyVideoTrans 目前确实没有专门的 MoonshotAI 渠道。要使用 MoonshotAI,您需要使用 "兼容AI/本地模型" 渠道,但需要进行正确的配置。请按以下步骤操作:在菜单栏选择 翻译设置。点击 兼容AI/本地模型。在配置界面中填写:API 地址:https://api.moonshot.cn/v1API Key:您的 Moonshot 密钥模型名称:moonshot-v1-8k(或其他您需要的模型)关键步骤:在 请求头 字段中填写:Authorization: Bearer ${apikey}这个请求头格式是 Moonshot API 要求的认证方式,能避免编码问题。完成配置后,在主界面选择翻译渠道为 兼容AI/本地模型 即可使用 MoonshotAI 进行翻译。

请求头字段在哪个位置,没找到

在 pyVideoTrans 的 "兼容AI/本地模型" 配置界面中,确实没有专门的"请求头"字段。请按以下步骤配置 MoonshotAI:在菜单栏选择 翻译设置。点击 兼容AI/本地模型。在配置界面中填写:API 地址https://api.moonshot.cn/v1API Key:您的 Moonshot 密钥模型名称moonshot-v1-8k关键步骤:将 API Key 字段中的内容改为完整的认证头格式:Bearer 您的实际API密钥内容例如,如果您的 API Key 是 sk-123456789,那么在 API Key 字段中应该填写:Bearer sk-123456789这样配置后,软件在发送请求时会自动使用这个完整的认证头,应该能解决编码问题。

修改了还是通不过自带的测试,报错

请提供具体的错误信息。在"兼容AI/本地模型"配置界面点击"测试"按钮后,软件会显示详细的错误提示。请将完整的错误信息复制给我,这有助于准确诊断问题。

同时,请确认您的API密钥格式是否正确:在API Key字段中应该填写完整的 Bearer your_actual_api_key_here,其中 your_actual_api_key_here 替换为您真实的Moonshot API密钥。

另外,请检查网络代理设置:由于Moonshot是国外服务,如果您的网络环境需要代理,请确保在主界面的"网络代理"字段中填写了正确的代理地址(如 http://127.0.0.1:10808)。

请提供测试失败的具体错误信息,这样我才能给出针对性的解决方案。

无效的值或参数:'ascii' codec can't encode character '\uff1a' in position 14: ordinal not in range(128):Traceback (most recent call last):
File "videotrans\translator\_base.py", line 80, in run
File "videotrans\translator\_base.py", line 143, in _run_srt
File "tenacity\__init__.py", line 338, in wrapped_f
File "tenacity\__init__.py", line 477, in call
File "tenacity\__init__.py", line 378, in iter
File "tenacity\__init__.py", line 421, in exc_check
tenacity.RetryError: RetryError[]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "videotrans\util\TestSrtTrans.py", line 19, in run
File "videotrans\translator\__init__.py", line 907, in run
File "videotrans\translator\_base.py", line 83, in run
File "tenacity\__init__.py", line 480, in call
File "videotrans\translator\_localllm.py", line 54, in _item_task
File "openai\_utils\_utils.py", line 286, in wrapper
File "openai\resources\chat\completions\completions.py", line 1156, in create
File "openai\_base_client.py", line 1259, in post
File "openai\_base_client.py", line 968, in request
File "openai\_base_client.py", line 495, in _build_request
File "openai\_base_client.py", line 439, in _build_headers
File "httpx\_models.py", line 156, in init
File "httpx\_models.py", line 82, in _normalize_header_value
UnicodeEncodeError: 'ascii' codec can't encode character '\uff1a' in position 14: ordinal not in range(128)

=
system:Windows-10-10.0.19045-SP0
version:v3.84
frozen:True
language:zh
root_dir:E:/Pyvideotrans

这个错误表明软件在构建HTTP请求头时仍然存在编码问题,尽管您已经修改了系统区域设置。问题出现在请求头中包含中文字符(如中文冒号:)时。请尝试以下解决方案:临时解决方案:使用其他翻译渠道。建议暂时使用 Google翻译、百度翻译 或 DeepSeek 等渠道,这些渠道通常更稳定且不会出现此类编码问题。检查软件版本:确认您使用的是最新版本的 pyVideoTrans。如果不是最新版,请从官网下载更新。修改高级选项:在菜单-工具-高级选项中,尝试将 AI翻译每次发送字幕行数 设置为 1,这可能会简化请求数据。如果以上方法都无法解决,这可能是软件本身的一个bug。建议您:在软件根目录下的 videotrans/logs/ 文件夹中找到完整的日志文件。前往 pyVideoTrans 的 GitHub 仓库 (https://github.com/jianchang512/pyvideotrans) 提交 issue,附上完整的错误日志和您遇到的问题描述。目前最实用的解决方案是暂时使用其他翻译渠道完成您的翻译任务。

就是最新版本才出现这样的问题,之前旧版本都是正常的,可以提供原先的版本吗

我理解您的问题,新版本确实可能存在兼容性问题。不过,作为AI助手,我无法直接提供软件的历史版本下载。建议您通过以下方式获取之前的稳定版本:访问 pyVideoTrans 的 GitHub 发布页面:https://github.com/jianchang512/pyvideotrans/releases在 Releases 页面中向下滚动,查看历史版本发布记录。寻找 v3.8.3 或更早的版本(因为您提到 v3.84 有问题)。点击对应版本的 "Assets" 展开下载链接,下载 Windows 版本的压缩包。同时,建议您在 GitHub 仓库的 Issues 页面反馈这个问题,让开发者了解新版本存在的编码兼容性问题,这有助于尽快修复。在等待修复期间,您可以暂时使用其他翻译渠道(如 Google翻译、DeepSeek等)来完成当前任务。

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Donate: https://ko-fi.com/jianchang512

Trending Questions