python json dumps utf8_Python2操作JSON出現亂碼的解決方案

其實剛剛寫過一整篇Python編碼問題的解決方案,由于JSON又是一種特殊案例(與庫相關,與語言本身無關)所以就單獨提出來說。

我們來看一個從網上獲取json并又存到本地文件的例子

import requests,json

r = requests.get('https://api.github.com/repos/solomonxie/\

solomonxie.github.io/issues/25/comments')

# 獲取到我的github中某條issue的所有評論,形式為

comments = json.loads( r.content )

# 取某一條評論查看內容(中文)

cc = comments[0]['body'][0:10] # 取出的內容是'## 配置:先從配置'

然后來測試下變量cc:

image

好,到這里先停一下!

JSON的讀取到目前為止,都是正常的:JSON Object對象給出的值都是unicode,沒有被莫名轉義,也沒有報錯誤。

但是,unicode格式,意味著它和str格式不兼容!

這時,害羞的大姑娘Unicode剛出爐,你不能在這個時候讓它和Str操作在一起!

報錯也往往就在這種疏于防備的時候!

比如你看:

image

上面打印了三條Unicode和Str的結合,

前兩條分別是以Str格式的結合,以Unicode格式的結合。

但是第三條,把兩個不同格式的字符串結合,就出錯了。

對不起,這里不是Javascript,變量不可以任意交合。Python對變量和編碼都是極其謹慎的。

所以明白了這點,我們再繼續。

上面獲得了JSON Object對象,那么再來試試將JSON對象整體存到文本文件中。

如果要存到本地文件,那么就必須把Object對象轉換為Str格式的字符串。

json庫自帶.dumps()函數可以進行轉化。

但是這里問題出現了!我們來小試一下:

image

竟然連print大法都不能把json.dumps()返回的內容正確打印出來。經過各種測試和查看官網對于此函數的文檔,發現:

原來json.dumps()是默認所有非ascii碼強制轉化為代號(而非漢字)的,于repr()效果等同!

官方文檔里有說明,json.dumps()里面有個ensure_ascii參數,默認為True。

意思就是默認把所有非ascii字碼用\強制轉化。所以,為了關閉這個功能,我們必須把它設為False.

下面是個小測試:

image

這樣一來JSON在Python里的編碼問題就解決了:須用json.dumps(obj, ensure_ascii=False)來轉化為字符串

下面是完整的代碼測試:

# @網絡資源到本地存儲真實測試

import requests,json

r = requests.get('https://api.github.com/repos/solomonxie/solomonxie.github.io/issues/25/comments')

# 獲取到我的github中某條issue的所有評論,形式為

comments = json.loads( r.content )

outgoing = json.dumps( comments, ensure_ascii=False )

with open('test.txt', 'w') as f:

f.write(outgoing.encode('utf-8'))

with open('test.txt', 'r') as f:

read = f.read()

print read[0:20], type(read)

來看結果:

image

大功告成!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【代碼筆記】iOS-字體抖動動畫

一,效果圖。 二,代碼。 ViewController.m #import "ViewController.h"interface ViewController ()endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typicall…

java for循環如何優化_java for循環及其優化

for循環1.首先知道,for循環的3個表達式的意思:表達式1: 一般為賦值表達式,給控制變量賦初值;表達式2: 關系表達式或邏輯表達式,循環控制條件;表達式3: 一般為賦值表達式&…

ElementUI+VUE 日期控件禁用用法

今天給大家整理一下ElementUIVUE 日期控件禁用用法&#xff0c;希望對大家有所幫助&#xff01;HTML文件<el-date-pickerv-model"value"type"date":editable"false"placeholder"開始日期"value-format"yyyy-MM-dd":picke…

利用rfcomm實現樹莓派與手機通信_工業物聯網 | 怎么用NodeRed實現樹莓派與阿里云物聯網平臺通信?虹科告訴你!...

想獲取更多IIOT干貨請點擊藍字&#xff0c;關注我們虹科工業樹莓派高性能多接口寬溫--適應惡劣環境★★★★★Node-RED是構建物聯網(IoT)應用程序的強大工具&#xff0c;它使用可視化的編程方法&#xff0c;允許開發人員將預定義的代碼塊(稱為“節點”)連接在一起以執行任務。當…

關于“using namespace std”

http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html轉載于:https://www.cnblogs.com/prayer521/p/5762948.html

mysql的mtr是指什么_MySQL中MTR的概念

MTR全稱是Mini-Transaction&#xff0c;顧名思義&#xff0c;可以理解為"最小的事務"&#xff0c;MySQL中把對底層頁面的一次原子訪問的過程稱之為一個Mini-Transaction&#xff0c;這里的原子操作&#xff0c;指的是要么全部成功&#xff0c;要么全部失敗&#xff0…

前端:Element UI 多選框組用法筆記

今天給大家分享一下Element UI 多選框組用法筆記&#xff0c;直接上代碼&#xff01;<html><head></head><body><el-form> <el-form-item label"興趣愛好:"> <el-checkbox-group v-model"form.checkList"> <…

xiaocms 關于搜索功能 添加搜索字段

自己折磨了好幾天 就是沒研究個出像樣的的東西 看了一下 core/controller/index.php searchAction()方法 但是不知從何下手。查了sql語句&#xff0c;還是沒實現 請教了一位自學php的小弟 &#xff0c;人家三下五除二的功夫就做出來了 解決的思路是一樣的&#xff0c;可我就是…

python編程第四版_清華編程教授強力推薦《Python編程》,指導你如何學習python

Python編程真的那么容易嗎&#xff1f;僅僅是看理論就可以學以致用嗎&#xff1f;今天我給你介紹的這本書&#xff0c;也許會讓你開始改變這種想法&#xff0c;因為這本書上的練習和案例以及指導本身就足夠學好Python了。清華編程教授強力推薦《Python編程》&#xff0c;指導你…

java 構造 statict_java學習:構造方法、static、final

在了解了java的基本數據結構后&#xff0c;開始學習java的類。java中的類也是一種數據結構&#xff0c;我認為它和C中的結構體挺像。類中可以有屬性和方法。類的方法中比較特別的是構造方法。java中類的構造方法要和類名相同&#xff0c;且沒有返回值。構造方法主要用于為類的對…

微信終于可以發送大文件了!

來源丨擴展迷EXTFANS&#xff08;ID&#xff1a;infinitydaily&#xff09;https://mp.weixin.qq.com/s/EAwYnq7435oMQnz6JqkHYg微信作為一款國民級的通訊軟件&#xff0c;雖然用戶基數龐大&#xff0c;但在用戶體驗方面一直飽受詬病&#xff0c;尤其是在部分功能方面&#xff…

Iterable 超級接口

這是一個老祖宗,一代一代往下撥 collection 的方法如下,是一個跟接口方法如下,見API collection : add():添加一個元素     addAll():添加一組元素 clear();清空     remove(Object o) &#xff1a;移除     removeAll():移除一組元素     isEmpty();判斷集合…

pc寄存器or程序計數器

一&#xff1a;PC寄存器解釋 二&#xff1a;PC寄存器的作用

項目設計基礎:處理過程設計相關知識介紹?

處理過程設計關鍵是用一種適當的表示形式來描述每個模塊執行過程。常用的表示形式有圖形、語言、表格。比如傳統的框圖、判定表等。1、程序流程圖&#xff08;Program Flow Chart&#xff09;程序流程圖也成為程序框圖&#xff0c;是最早、流行最廣泛的一種圖形表示方法。程序流…

關于JS中的定時器!!!

定時器: 周期性定時器 一次性定時器 1. 周期性定時器: 讓程序每隔一段時間間隔&#xff0c;反復執行一項任務 何時使用: 只要連續&#xff0c;有規律的持續播放的動畫 如何使用: 3件事&#xff1a; 1. ***任務函數: 定時器每次執行的任務 function task(){...} 任務函數通常要…

python 更新數據庫歷史_python 實現數據庫中數據添加、查詢與更新的示例代碼

一、前言最近做web網站的測試&#xff0c;遇到很多需要批量造數據的功能&#xff1b;比如某個頁面展示數據條數需要達到10000條進行測試&#xff0c;此時手動構造數據肯定是不可能的&#xff0c;此時只能通過python腳本進行自動構造數據&#xff1b;本次構造數據主要涉及到在某…

git沖突“accept theirs”和“accept yours”

Accept Yours 就是直接選取本地的代碼&#xff0c;覆蓋掉遠程倉庫的 Accept Theirs 是直接選取遠程倉庫的&#xff0c;覆蓋掉自己本地的 我們選擇Merge,自己手動行進選擇、修改。 這里左邊部分是你本地倉庫的代碼&#xff0c;右邊部分是遠程倉庫的代碼&#xff0c;中間的res…

系統實施基礎:系統實施的相關知識介紹

1、系統實施的目的系統實施屬于新系統開發工作的最后一個階段&#xff0c;屬于交付系統給客戶的最后階段。2、系統實施的任務硬件準備&#xff1a;按照總體設計方案準備服務器、配置網絡系統。主要包括計算機主機/云服務器、輸入輸出設備、存儲設備、通信設備等。軟件準備&…

線程同步以及yield()、wait()、Notify()、Notifyall()

一、線程同步 1、線程同步的目的是為了保護多個線程訪問一個資源時對資源的破壞。2、線程同步方法是通過鎖來實現&#xff0c;每個對象都有切僅有一個鎖&#xff0c;這個鎖與一個特定的對象關聯&#xff0c;線程一旦獲取了對象鎖&#xff0c;其他訪問該對象的線程就無法再訪問該…