日韩性视频-久久久蜜桃-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编码介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 丰满少妇一区 | 热九九精品 | 7777精品视频| 色爱av综合 | 国产福利一区在线观看 | 日本少妇久久 | 久草新 | 亚洲精品在线免费看 | 亚洲偷自 | 亚洲男人网 | 日韩爱爱网站 | 91免费视频观看 | 野花av| 国产一国产二国产三 | 向日葵视频在线 | 天堂av中文在线观看 | 国产免费观看视频 | 亚洲综合免费视频 | 欧美一区二区三区免 | wwxx日本 | 日韩成人精品在线观看 | 黄色大片免费看 | 久久精品一二三区 | 亚洲视频欧洲视频 | av狠狠| 欧美三级视频网站 | 日本美女逼 | 午夜性福利 | 久草最新 | 国内性视频 | 射区导航 | 国产精品啪 | 日本狠狠干 | 香蕉av一区二区三区 | 2023天天操| 久久大胆 | 国产一区二区91 | 欧美激情一区 | 四虎久久久 | 成人a毛片久久免费播放 | 亚洲涩视频 | 手机看片久久 | 欧美日韩一级在线观看 | 中文字幕亚洲一区二区三区五十路 | 国产精品探花一区二区三区 | 奇米影视首页 | 精品熟妇无码av免费久久 | 中国老头同性xxxxx | 91影院在线免费观看 | 久久久高清 | 免费乱淫视频 | 久久久免费毛片 | 麻豆蜜臀| 国内精品人妻无码久久久影院蜜桃 | 一级黄色片看看 | 丰满熟妇被猛烈进入高清片 | 国产精品九九九 | 亚洲伊人av | 在线观看羞羞漫画 | 精品人伦一区二区三电影 | 99精品久久久久久久婷婷 | 黄色一及片| 久久影库 | 日韩欧美二区三区 | 中文字幕日韩无 | 国产乱欲视频 | 亚洲性生活视频 | 亚洲无码国产精品 | 成人免费视频国产免费麻豆 | 国产三级av片 | 中文字幕在线观看一区 | 久久激情小说 | 久久成人精品一区二区 | 织田真子作品 | 玖玖成人| 91网站免费观看 | 制服丝袜av一区二区三区下载 | 蜜臀久久99精品久久久久宅男 | 91男女视频 | 国产精品国产一区二区 | 欧美久久久久久久久久 | 亚洲伊人久久久 | 粉嫩一区二区三区 | 国产精品一区二区三 | 国产91在线高潮白浆在线观看 | 九一精品视频 | 国产美女明星三级做爰 | av色播 | 国产一级在线观看 | 成人综合社区 | 俄罗斯黄色录像 | 免费成人深夜小野草 | 五月av| 波多野结衣视频播放 | 久久精品综合视频 | 好看的中文字幕 | 成人免费午夜视频 | 欧美破处女| 国精产品一区一区三区视频 |