Python处理法语拉丁字符失效:非ASCII字符被替换为空格
问题原因及解决方法
你的代码里处理拉丁字符的分支没触发,核心问题是打开文件时没指定编码,导致法语特有的拉丁字符被错误解析,它们的ord()值根本不在224-254这个区间里,自然走不到对应的分支。
另外,用ord()判断字符范围的方式太局限,只覆盖了ASCII和部分拉丁字符,对Unicode支持不好,不如直接用Python字符串的isalpha()方法,它能识别所有Unicode字母(包括法语的é、ç、ù等)。
修改后的代码
def convert(): for filename in files_names: # 打开文件时指定utf-8编码,确保字符正确读取 with open(f"speeches/{filename}", "r", encoding="utf-8") as f1: cleaned_text = " " for line in f1: for char in line: if char.isalpha(): # 统一转成小写 cleaned_text += char.lower() else: # 非字母字符替换为空格,避免连续空格 if cleaned_text[-1] != " ": cleaned_text += " " # 写入文件同样指定utf-8编码 with open(f"./cleaned/{filename}", "w", encoding="utf-8") as f2: f2.write(cleaned_text[1:])
关键修改点
- 用
with语句管理文件,自动关闭,避免手动close的疏漏 - 打开文件时明确指定
encoding="utf-8",保证法语字符正确读取 - 用
char.isalpha()替代ord()判断,兼容所有Unicode字母(包括法语特殊字符) - 统一用
lower()转小写,简化原有的大小写判断逻辑
这样修改后,é、ç、ù这些字符会被正确保留,不会被替换成空格了。
内容的提问来源于stack exchange,提问作者The Geniot
相关产品推荐
相关产品推荐

