ChatTTS 中文乱码修复——WeTextProcessing 预处理与 UTF-8 编码
症状
- 生成的语音里个别字发音异常(读成"滴哩嘀嗒"式的噪音)
- 某些符号或数字被错误解读
- 中文长句断句混乱
原因
ChatTTS 对中文的文本预处理有以下依赖:
- 文本编码必须是 UTF-8(不是 GBK / GB2312)
- 数字转汉字、英文转拼音等预处理需要额外库支持
- WeTextProcessing 是 ChatTTS 依赖的文本处理组件
解决方案
确认编码
Python 字符串默认是 Unicode,不会有编码问题——问题通常出现在从文件读取文本时:
# 错误(Windows 默认 GBK)
with open('texts.txt') as f:
text = f.read()
# 正确
with open('texts.txt', encoding='utf-8') as f:
text = f.read()
安装文本预处理依赖
pip install WeTextProcessing pypinyin cn2an
这三个库是 ChatTTS 做中文文本预处理的关键:
- WeTextProcessing:中文文本规范化(标点、空格、数字转换)
- pypinyin:拼音转换(帮助模型正确发音)
- cn2an:中文数字转阿拉伯数字
手动预处理
如果以上都装了还是有问题,可以手动做预处理再送 ChatTTS:
import cn2an
import re
def preprocess(text):
# 阿拉伯数字转中文
text = cn2an.transform(text, 'cn2an')
# 全角标点转半角(如果需要)
# ...
return text
text = preprocess(raw_text)
wavs = chat.infer(text)
避免特殊字符
ChatTTS 对 Emoji、特殊符号、罕见 Unicode 字符的支持不完美。如果输入里有这些,建议先过滤掉。
典型修复路径
- 确认输入是 Python 字符串,不是从文件读的 GBK bytes
- 安装 WeTextProcessing、pypinyin、cn2an
- 如果还有问题,手动做数字转换
- 检查是否有 Emoji 等特殊字符