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/cn.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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP