日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

UnicodeEncodeError: ‘utf-8‘ codec can‘t encode characters in position解決方法

作者:CrazyCosin 更新時間: 2022-05-13 編程語言

一、問題背景

爬蟲采集來的文件名中含有emoji以及全角半角符號,但是采集時并沒有處理,原封不動存儲到了數據中。現在有個需求,從數據庫中取出數據,發送跟客戶端,客戶端拿這文件名寫入到文件緩存。問題出現在緩存到了文件,再從文件取出來的時候,報了unicodeError。

二、解決方法?

1.首先服務端發送特殊字符的時候,json dumps的時候要指定ensure_ascii為False,不編碼。保留原字符。

2.這里其實有個標準輸出問題,客戶端拿到傳輸的字符,json loads 但是emoji或者/u3000這種全角符號依然會存在,但是使用print打印卻不會顯示。

ss = '/電視劇/換子成龍 02 主 演: 劉愷威 杜淳 馬雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg'

d = {'file_path': ss}
f = json.dumps(d, ensure_ascii=False)
# f 的內容
# '{"file_path": "/電視劇/換子成龍 02 主\u3000演: 劉愷威 杜淳 馬雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg"}'
k = json.loads(f)
# k 的內容
# {'file_path': '/電視劇/換子成龍 02 主\u3000演: 劉愷威 杜淳 馬雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg'}

# 這時候使用print打印
# 顯示 /電視劇/換子成龍 02 主 演: 劉愷威 杜淳 馬雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg 結果是正常的

# 但是寫如文件
with open('test.txt',w) as f:
    f.write(k['file_path'])
# 在文件中打開 依然顯示\u3000這個字符

# 采用標準輸出流重定向
with open('test.txt', 'wt') as f:
    print(k['file_path'], file=f)
# 在文件中打開,顯示正常不含\u3000

原文鏈接:https://blog.csdn.net/CrazyCosin/article/details/121514861

欄目分類
最近更新