Python 板


LINE

※ 引述《ReTryx ()》之銘言: : 想請教各位高手們有沒有遇到如標題的問題過?google完也試過網路上的解法,都無法成 : 功。 : 以下是環境以及問題 前面先囉嗦一下,有時候看到一些問題會懶 得回答(不是指這篇,而是前面幾篇有感) ,是因為每個人的時間都是很寶貴的,而回 答問題從來都不是別人的義務;有不少篇我 看下來的感覺都是: 「我這個不會,你看完之後教我吧!」 「你說的好難喔,直接給我程式碼吧!」 有時光是要重現問題,把環境設定一致,隨 著問題的複雜程度都可能要花上十分鐘半小 時了,別人當然懶了……同樣時間我拿去看 個影集還比較爽一些。 --- 回到這個問題,我試著說明一下,作為「幫 忙解決問題的人,我希望能夠獲得哪些資訊 ?」 推文的上下文不明確,是因為這裡涉及了編 碼問題,而這個問題的一些關鍵,並不能從 你最初的敘述中看出是哪一段出了問題。 因為: (1) 你使用的編輯器可以選擇編碼 (2) 你使用的資料庫客戶端可以選擇編碼 (3) Python 版本會影響編碼處理機制 讓我們來看看敘述部分: : 我用pymssql 連 mssql, 在連線的時候一定要把charset 也寫進去,不然會出現錯誤,而 : 我charset 是用CP950 這段沒什麼問題,但你是不是沒有提供版本 呢?以現在 2022 年來說,應該絕大多數的 使用者都會選擇 Python3 而非 Python2 了 ,但是有時候礙於公司內部環境限制,仍然 有可能使用後者。 所以我會先預設你是使用 Python3 但是你推文又提到會顯示宣告編碼: # -*- coding: utf-8 -*- 由於 Python3 預設已經使用 UTF-8 所以除 非要變更,不然通常不會添加這段到程式碼 中,那麼別人要怎麼知道你使用的是哪一個 版本呢? : 接著在insert中文進SQL後,在SQL裡面看會發現insert進去的都是亂碼。但如果用Python : 再select 出來卻會是中文。 這段的問題如下: > "Insert 中文進 SQL" 怎麼 INSERT?運行的程式碼是? 該段程式碼是以什麼編碼儲存的? SQL 指的是查詢語言不是資料庫 雖然看得懂但我更希望說清楚是 MSSQL > "在 SQL 裡面看會發現都是亂碼" 雖然從敘述中我知道是 MSSQL 但是連線使用的客戶端眾多,是哪個? 你是在終端裡面看到亂碼? 還是客戶端圖形介面裡看到亂碼? SQL Server Management Studio 嗎? Navicat 嗎?DataGrip 嗎? PowerShell 下使用命令行嗎? Python REPL 下使用 pymssql 撈嗎? (上述二者又牽扯到終端機的編碼) Jupyter Notebook 上看嗎? (又牽扯到瀏覽器的編碼) > "用 Python 再 SELECT 出來卻是中文" 在哪裡操作執行 Python 呢? 開發環境整合的內嵌終端機嗎? 還是撈出來又存入了文件查看? : 但如果是SQL裡面本來就是中文的資料,從Python select 出來就也會變成亂碼在Python : 上,同樣的,用Python 寫進去變成亂碼的中文由其他語言讀出來也會是亂碼。 其實你自己也不清楚究竟問題出在哪裡, 這個原因大概是對於編碼轉換,還有字串 與文字怎麼儲存的基礎知識並不理解的原 因。 你有沒有想過: 「一段文字是怎麼被儲存的呢?」 「編碼是幹嘛用的?」 有時候我會覺得這是書到用時方恨少,畢 竟這個是計算機概論就會提及的內容,而 在作業系統、計算機網路等相關學科都會 一再地重複出現。 --- 我這邊只提供一些知識點,因為涉及兩個 版本,你必須自己去搞清楚。 (1) 在 Python 中有兩種資料型別可以代   表字元資料的序列:bytes, str (2) bytes 存放原始無符號的八位元值,   並以 ASCII 編碼顯示 (3) str 存放含有 Unicode 的碼位   (code points) (4) 搞清楚今天拿到的是 Unicode 資料還   是 Binary 資料 (5) 上述這些是指 Python3,在 Python2   中則沒有明確區分 (6) 檔案儲存的時候是二進制 : 簡單來說就是Python寫進去的中文亂碼只能由Python 自己讀來才能解碼成中文。而本來 : 在DB裡就是中文的資料Python 讀出來就會變成亂碼。 : 我試過用encode and decode,但還是無解。請問有人成功試過從中文從Python寫進MSSQL : 裡面不會變成亂碼的嗎? 可能原因太多了,你需要花時間自己去釐 清一下,我只列可能的狀況: (1) 你的操作是正確的,但既有存入的中 文本身編碼沒有正確處理 (2) 你的操作是錯誤的,而既有存入的中 文本身編碼已被正確處理 情況二比較有可能,比如你編輯器裡使用 UTF8 卻又告知要以 Big5 進行編碼,過 程中又沒有妥善處理解碼跟編碼問題(跟 版本有關),導致最後存進去的東西是四 不像。 先搞清楚究竟是哪一段的編碼解碼造成問 題,或者說哪一段的編碼導致顯示問題。 : 感謝幫忙 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.138.237.231 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1667545660.A.44C.html ※ 編輯: Hsins (223.138.237.231 臺灣), 11/04/2022 15:10:05
1F:→ Hsins: 另外如果對於資料庫存取效率沒什麼要求,可以考慮其他套件 11/04 15:22
2F:→ Hsins: 比如 pyodbc 可以指定 setdecoding, setencoding 11/04 15:24
3F:推 cuteSquirrel: 尼是好人 11/04 15:51
4F:→ surimodo: 其實應該把stackoverflow規則貼過來 裡面要求要能最小 11/04 16:03
5F:→ surimodo: 化重現問題程式碼 11/04 16:03
6F:推 tzouandy2818: 推這篇 11/04 16:17
7F:推 ToastBen: 推好心 11/04 20:15
8F:推 GlobeTrekker: https://bit.ly/3WRyXc2 11/09 23:23







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP