
MySQL 数据库里存的数据是 utf-8,python3 写入文本,还是会出乱码:
news = News.query.filter_by(news_id=news_id).first() f = open('news.txt', 'w') f.write(news.content) f.close() news.content 文章内容是全英文的 OK,文章里面有中文就是乱码。
2 rogwan OP |
3 fanhaipeng0403 2017-09-04 17:09:39 +08:00 数据库编码设置,驱动编码设置 |
4 ltux 2017-09-04 17:13:07 +08:00 先搞清楚 news.content 是 bytes 还是 str |
5 rogwan OP |
6 geofvt 2017-09-04 17:30:01 +08:00 news.content 需要编码转换 或者用 beautifulsoup 的 prettify() https://gist.github.com/ercJuL/97e27d199451d43f93f14d41625955c9 |
7 petelin 2017-09-04 17:39:13 +08:00 乱码贴出来看看 |
9 ltux 2017-09-04 18:06:15 +08:00 我猜 new.content 里面是原内容以 utf-8 编码之后又原封不动转换成了对应的 str。所以解决方法是先原封不动转换成 bytes, 再按 utf-8 解码,即:news.content.encode('latin-1').decode('utf-8') 说到底还是数据库驱动设置的问题。 |
10 ltux 2017-09-04 18:09:44 +08:00 如上,写入的时候把 f.write( news.content ) 换成 f.write( news.content.encode('latin-1').decode('utf-8') ) 八成就行了。 |
11 xhp281 2017-09-04 18:34:38 +08:00 f = open('news.txt', 'w', encoding='utf-8') 这样子不行?你打印的时候是不是乱码 |
12 rogwan OP |
13 mcfog 2017-09-04 19:53:23 +08:00 via Android 赌五毛楼主是 windows 环境,赌一块楼主不知道什么是 BOM |
14 rogwan OP @mcfog 你先把 5 毛掏出来先,哈哈 全部是 ubuntu 环境 server 和 desktop (只是用了一次 idle ) bom 在这个 debug 里为什么要出现? |
15 flynaj 2017-09-04 20:28:56 +08:00 via Android .py 文件也要保存成 UTF-8,新手问题 |
16 likuku 2017-09-04 22:12:46 +08:00 先确认你数据库内数据表的编码是 utf8,数据库连接是 utf8,数据存取时是 utf8,原始数据是 utf8 编码 |