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

Python过滤CSV阿拉伯文本异常:部分字符输出乱码求助

问题原因与解决方案

你的乱码问题核心不是字符检测逻辑,而是直接用纯文本写入方式处理CSV内容,破坏了CSV格式规则,导致后续打开文件时工具错误识别编码。

具体原因

  • 原文件是CSV格式,csv.reader读取的行可能包含逗号、引号等CSV特殊语法字符。你直接用f.write(mylist[i][0] + "\n")写入时,会打破CSV的格式规范。
  • 过滤Lam(U+0644)的行时,刚好这些行没有触发格式冲突,工具能正常识别UTF-8编码;但过滤Kaf(U+0643)的行时,存在格式冲突的内容,导致工具错误将UTF-8字节当作单字节编码(如Latin-1)解析,出现类似سÙورَةÙ...的乱码。

额外注意:阿拉伯语字符存在连写变体,孤立形式的Kaf(U+0643)在词中/词尾会变成U+FE9B(词中形式)、U+FE9C(词尾形式),如果原文本里的Kaf是这些变体,你的原始检测逻辑会漏匹配。


修复代码(保持CSV格式)

用csv.writer处理写入,严格遵循CSV格式规则,同时覆盖Kaf的所有连写变体:

import csv

# 读取原CSV并过滤目标行
with open("Arabic-Original.csv", "r", encoding="utf-8") as in_file:
    reader = csv.reader(in_file)
    # 包含Kaf的所有形态:孤立、词中、词尾
    target_kafs = {chr(0x0643), chr(0xFE9B), chr(0xFE9C)}
    filtered_rows = [row for row in reader if any(char in row[0] for char in target_kafs)]

# 写入规范的CSV文件
with open("copiedverses.csv", "w", encoding="utf-8", newline='') as out_file:
    writer = csv.writer(out_file)
    writer.writerows(filtered_rows)

若需输出纯文本而非CSV

如果不需要保持CSV格式,仅输出经文内容,确保写入编码正确,打开时选择UTF-8编码:

import csv

target_kafs = {chr(0x0643), chr(0xFE9B), chr(0xFE9C)}

with open("Arabic-Original.csv", "r", encoding="utf-8") as in_file, \
     open("copiedverses.txt", "w", encoding="utf-8") as out_file:
    reader = csv.reader(in_file)
    for row in reader:
        if any(char in row[0] for char in target_kafs):
            out_file.write(row[0] + "\n")

内容的提问来源于stack exchange,提问作者Omar Ibrahim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:20:38