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,文章里面有中文就是乱码。
1
yunkchen 2017-09-04 16:57:09 +08:00 1
|
2
rogwan OP |
3
fanhaipeng0403 2017-09-04 17:09:39 +08:00 1
数据库编码设置,驱动编码设置
|
4
ltux 2017-09-04 17:13:07 +08:00 1
先搞清楚 news.content 是 bytes 还是 str
|
5
rogwan OP |
6
geofvt 2017-09-04 17:30:01 +08:00 1
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 1
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 编码
|