日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

python mysql 编码方式,Python3编码与mysql编码介绍

發布時間:2025/4/16 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python mysql 编码方式,Python3编码与mysql编码介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python3自詡解決了編碼問題,但還是有一系列的坑。本文就記錄下前幾天遇到的python3編碼問題。mysql編碼問題附帶介紹。

python3 json串的編碼

針對于包含中文的字典,如果想要正常顯示中文,在dumps時,需配置參數ensure_ascii=False。舉例:

a={"name":"中國"}

json.dumps(a)

'{"name": "\\u4e2d\\u56fd"}'

json.dumps(a,ensure_ascii=False)

'{"name": "中國"}'

針對于包含特定轉義字符的字符串,如果想要正常解析,需要在loads時配置strict=False。舉例:

json.loads('{"foo":"bar\nbaz"}')

Traceback (most recent call last):

File "", line 1, in

json.loads('{"foo":"bar\nbaz"}')

File "C:\Users\jonyguo\AppData\Local\Programs\Python\Python36\lib\json\__init__.py", line 354, in loads

return _default_decoder.decode(s)

File "C:\Users\jonyguo\AppData\Local\Programs\Python\Python36\lib\json\decoder.py", line 339, in decode

obj, end = self.raw_decode(s, idx=_w(s, 0).end())

File "C:\Users\jonyguo\AppData\Local\Programs\Python\Python36\lib\json\decoder.py", line 355, in raw_decode

obj, end = self.scan_once(s, idx)

json.decoder.JSONDecodeError: Invalid control character at: line 1 column 12 (char 11)

json.loads('{"foo":"bar\nbaz"}', strict=False)

{'foo': 'bar\nbaz'}

python3的字符串編碼

python3中只有兩種字符串,一是str,一是bytes。str經過encode變成bytes,bytes經過decode變成str。

有時從網絡取出的包含中文的數據為unicode編碼的字符串,可通過先編碼在解碼轉化為中文:

a="\\u4e2d\\u56fd"

print(a)

\u4e2d\u56fd

a.encode().decode("unicode_escape")

'中國'

也可以通過repr將其轉化為字符串,將兩個反斜杠替換為一個反斜杠來解決這個問題:

a="\\u4e2d\\u56fd"

eval(repr(a).replace('\\\\', '\\'))

'中國'

python3 + apache的字符編碼問題

python3腳本作為cgi供前端界面調用。遇到了一個很奇怪的問題,我通過編寫的python腳本調用cgi時,編碼一切正常,但是當我通過http調用時會出現一些問題。從數據庫中取中文數據,返回前端顯示一切都正常。但是當我把數據庫中的中文與一些字符組成一個文件名,判斷文件是否存在時,一直報錯:UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-49: ordinal not in range(128)。

剛開始以為是apache的編碼問題,后來查看apache的編碼也確定是utf8,不知所措。經google,查找到了原因。

https://www.raspberrypi.org/forums/viewtopic.php?t=65257 這個帖子里面有介紹到說:

The difference is that from the command line Python inherits your locale settings (probably LANG=fr_FR.UTF-8), whereas from Apache it inherits LANG=C. It knows that your strings are Unicode, but it can not print them in an ASCII environment.

說是通過python腳本調用的時候python繼承的是locale 設置,為utf8,可正常顯示(個人感覺這里可能說的有些不恰當,這里應該是采用python3自己的編碼)。而apache繼承的是LANG=C,為ascii,無法正常顯示。按照其配置,在/etc/apache2/envvars中添加. /etc/default/locale(/etc/sysconfig/i18n)即可。配置后發現依然無法解決問題。

后又繼續google,找到了解決方案。

https://stackoverflow.com/questions/9322410/set-encoding-in-python-3-cgi-scripts

Add PassEnv LANG line to the end of your /etc/apache2/apache2.conf or .htaccess.

Uncomment . /etc/default/locale line in /etc/apache2/envvars.

Make sure line similar to LANG="en_US.UTF-8" is present in /etc/default/locale.

就是在apache2的配置文件中添加一行:PassEnv LANG 即可。要確保LANG為utf8。

mysql編碼問題

查看當前的數據庫編碼:

mysql> show variables like 'character%';

+--------------------------+--------------------------------------------------------------+

| Variable_name | Value |

+--------------------------+--------------------------------------------------------------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql-5.1.46-linux-x86_64-glibc23/share/charsets/ |

+--------------------------+--------------------------------------------------------------+

從上圖可知,數據庫的編碼為utf8.

● character_set_client:無論客戶端傳遞的是什么編碼的數據,服務器都當成該編碼來處理,例如該編碼為UTF8,那么如果客戶端發送過來的數據不是UTF8,那么就會出現亂碼;

● character_set_connection:通過該編碼與client一致!該編碼不會導致亂碼!當執行的是查詢語句時,客戶端發送過來的數據會先轉換成connection指定的編碼。但只要客戶端發送過來的數據與client指定的編碼一致,那么轉換就不會出現問題;

● character_set_database:數據庫默認編碼,在創建數據庫時,如果沒有指定編碼,那么默認使用database編碼;

● character_set_filesystem:可以理解為文件的最終存儲形式,是二進制形式的;

● character_set_server:MySQL服務器默認編碼;

● character_set_results:MySQL會把數據轉換成該編碼后,再發送給客戶端,例如該編碼為UTF8,那么如果客戶端不使用UTF8來解讀,那么就會出現亂碼,說明客戶端必須使用result指定的編碼來解碼;

一條數據庫連接的過程如下:

client --> connection --> server --> connection --> result

其實只要保證client、connection和result 一致就不會出現亂碼問題。

通過set names utf8 保證client、connection和result 的編碼一致:

mysql> show variables like 'character%';

+--------------------------+--------------------------------------------------------------+

| Variable_name | Value |

+--------------------------+--------------------------------------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/mysql-5.1.46-linux-x86_64-glibc23/share/charsets/ |

+--------------------------+--------------------------------------------------------------+

總結

以上是生活随笔為你收集整理的python mysql 编码方式,Python3编码与mysql编码介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 玖玖在线播放 | 精品妇女一区二区三区 | 亚洲做受高潮无遮挡 | 国产精品无码一区二区无人区多人 | 亚洲成人自拍 | 亚洲国产精品无码久久久久高潮 | cao死你 | 日韩一区二区三区精品 | 国产午夜伦理 | 日日夜夜人人 | 69久久 | 狠狠综合一区 | 春闺艳妇(h)高h产乳 | 一级福利片 | 精品国产区一区二 | 国产精品麻豆一区二区 | 91资源在线观看 | 精品美女一区二区三区 | 免费av导航 | 色一情| 亚洲国产一区在线观看 | 欧美另类xxxx野战 | 中文字幕av高清 | 韩国av免费观看 | av动漫免费观看 | h视频免费在线观看 | 成人av电影网站 | 日韩欧美99 | 日韩三级小视频 | 最新成人在线 | 日本欧美另类 | 99一区二区| 国产香蕉97碰碰碰视频在线观看 | 涩视频在线观看 | a级无遮挡超级高清-在线观看 | 蜜臀av免费在线观看 | 一对一色视频聊天a | 大地资源中文在线观看免费版 | 国产高潮视频 | h片在线观看网站 | 亚洲精品69 | 亚洲12p | 一本一道人人妻人人妻αv 九一在线视频 | 亚洲欧美在线视频免费 | 亚洲成人h | 一级艳片新婚之夜 | 一级片在线观看视频 | 日本黄页视频 | 成年人在线视频免费观看 | 亚洲一区二区三区四区av | 男人的天堂网在线 | 日韩中文无 | 草草影院欧美 | 日韩欧美一区二区三区在线观看 | 操操操爽爽爽 | 国产资源精品 | 久久最新视频 | 亚洲激情专区 | 色综合中文字幕 | 夜夜撸影院 | 国产精品理伦片 | 亚洲一区二区天堂 | av大片在线免费观看 | 中国黄色录像 | 国产精品欧美一区二区三区 | 欧美在线免费观看视频 | 黄色小说网站在线观看 | 国产人与禽zoz0性伦 | 18黄暴禁片在线观看 | 国产高潮又爽又无遮挡又免费 | 成人网站免费观看 | 亚洲免费在线观看av | 国产做受91| 不卡的av网站 | 99视频在线免费 | 欧美亚洲一区二区三区 | 久免费一级suv好看的国产 | 每日av在线 | 扩阴视频 | av狠狠干| 亚洲一区成人 | 美女黄色录像 | 久久久久亚洲av成人毛片韩 | 男人的天堂av女优 | 激情久久五月 | 亚洲午夜久久久久久久久久久 | 99久久久国产精品无码性 | sm乳奴虐乳调教bdsm | 极品久久久久久 | 国产精品揄拍100视频 | 国产精品成人久久电影 | 日韩夜夜高潮夜夜爽无码 | 岛国福利视频 | v天堂在线 | 和黑帮大佬的365 | 国产对白自拍 | 在线看福利影 | 国产高清二区 | 一区二区三区精品视频在线观看 |