从docx读取特殊字符

1 投票
1 回答
906 浏览
提问于 2025-04-18 16:11

我正在尝试读取一个docx文件,然后把它分成重要的部分,放到我的数据库里。问题是我的docx文件是葡萄牙语的,所以里面有很多特殊字符(比如:á, ã, â),我已经为了解决这个问题挣扎了好几天。因为当我把这些内容添加到数据库时,特殊字符都变成了'?'。

这是我的代码:

cursor = db.cursor()
document = docx.Document('teste.docx')
docText = '\n\n'.join([paragraph.text.encode('utf-8') for paragraph in document.paragraphs])
d2 = docText.decode("utf-8")

N = len(d2.encode(sys.stdout.encoding, errors='replace').split("\n"))

query = ''
questao = {}

for i in range(0,N):
    s = d2.encode(sys.stdout.encoding, errors='replace').split("\n")[i]
    try:
        isinstance(int(s[0:2]), int)
        questao[num_questoes] = d2.encode(sys.stdout.encoding, errors='replace').split("\n")[i][3:len(s)]
        query = 'INSERT INTO multichoice_question (category_id, content) VALUES ("4", "' + d2.encode(sys.stdout.encoding, errors='replace').split("\n")[i][3:len(s)] + '");'
        try:
            cursor.execute(query)
            db.commit()
        except MySQLdb.Error, e:
            print "error %s" %e
            db.rollback()  
    except:
        pass

1 个回答

1

这是在问你用的是MySQL数据库吗?可能有两个问题:

  1. 在连接数据库的时候,你可能忘记设置连接的字符集为utf8了,这样它就会默认用ASCII来写你的文本。请展示一下你是怎么建立数据库连接的。如果你使用的是MySQLdb这个包,那么在调用MySQLdb.connect函数时,你需要加上use_unicode=True和charset="utf8"这两个参数。
  2. 你的表或者列的字符集不是UTF8,而是某种ASCII字符集。你需要把它改成UTF8。

撰写回答