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,文章里面有中文就是乱码。
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
|
|
2
|
|
3
数据库编码设置,驱动编码设置
|
|
4
先搞清楚 news.content 是 bytes 还是 str
|
|
6
news.content 需要编码转换
或者用 beautifulsoup 的 prettify() https://gist.github.com/ercJuL/97e27d199451d43f93f14d41625955c9 |
|
petelinSep 4, 2017
7
乱码贴出来看看
|
|
ltuxSep 4, 2017
9
我猜 new.content 里面是原内容以 utf-8 编码之后又原封不动转换成了对应的 str。所以解决方法是先原封不动转换成 bytes, 再按 utf-8 解码,即:news.content.encode('latin-1').decode('utf-8')
说到底还是数据库驱动设置的问题。 |
|
ltuxSep 4, 2017
10
如上,写入的时候把 f.write( news.content ) 换成 f.write( news.content.encode('latin-1').decode('utf-8') ) 八成就行了。
|
|
11
f = open('news.txt', 'w', encoding='utf-8') 这样子不行?你打印的时候是不是乱码
|
|
12
|
|
mcfogSep 4, 2017 via Android
13
赌五毛楼主是 windows 环境,赌一块楼主不知道什么是 BOM
|
|
14
@mcfog 你先把 5 毛掏出来先,哈哈😄 全部是 ubuntu 环境 server 和 desktop (只是用了一次 idle ) bom 在这个 debug 里为什么要出现?
|
|
flynajSep 4, 2017 via Android
15
.py 文件也要保存成 UTF-8,新手问题
|
|
likukuSep 4, 2017
16
先确认你数据库内数据表的编码是 utf8,数据库连接是 utf8,数据存取时是 utf8,原始数据是 utf8 编码
|