• 成大事者不拘小節
    魔鬼藏在細節裡

    兩句話看似相互矛盾,但其實使用的場景是不同的
    年輕人,把這兩句話串在一起,就定位成幹話

    真的這淺薄嗎?

  • 想像力比知識更重要?
    你的問題在於書讀得太少,想得太多。

    如果是可比較的,那請您思考:想像力固然重要,是不是應該讓你的知識追上你的想像力?

  • 學士 學習知識 判斷問題(價值)
    碩士 運用知識 解決問題
    博士 創造知識 發現問題

  • 真知灼见

    一、明确的见解。

    二、真的知道,看得清楚。

  • 听到一个输入、输出的说法, 你觉得有道理吗?

    假设,你所读的文章, 看的书,都是一种养份,

    如果你吸收了养份,没有立即输出,则这个养份会供给到其他的部份,

    比如,你无法抒发的情绪很可能更增加,你的压力可能增加,

    当然你也可能内化了这些养份,

    但是这些你没有立即输出的养份,到底供给了什麽部份,并不确实知道。

    所以,当你要吸收养份的时候,请确保立即输出,输出了之後也能整理、过滤、内化。

    这样的说法,对吗?你认为呢?欢迎跟我讨论。

  • 为什麽别人的话术SOP你用不好?

    越复杂的结构,耦合度势必越高

    越单纯的结构,鲁棒性越高

    也因此对於初创的团队, 我都会用一个单纯的框架去建构工作引擎

    而对於已成立一段时间的团队,我都会先从既有的SOP开始优化,再进行创新

    还记得某洛姓老板,非常主观的直接把一个别的推广团队所使用的 推广SOP

    强加到某个自已公司的一个业推广团队上,导致团队2个星期业绩重创,

    而我所引导同公司的另一个业绩较差的团队,使用同一套推广SOP, 则是第二个星期开始业绩飙升。

    同一套SOP操作、说法、话术,为什麽有不同的结果?不值得深思吗?

  • 浅薄交流

    现代的通讯软件很发达,国内有 微信 国外有 whats app line

    造成了交流都是浅薄的,一句话过来你就一句话过去,

    没有书信或是 e-mail 时代的深思熟虑,

    都是很浅层的沟通,失去了深度。

  • 做什麽事情都是一样的,可以包装,但不要欺骗

    君子与骗子的区别

    君子说一句假话,没人会怀疑。

    骗子说十句实话,没人会当真。

  • 非敌亦友

    我们有个代理商的群组,大家彼此认识,有时互通有无。

    群组里大部份是同行,我们一直推行的是大家是战友不是敌人。

    群里气氛还不错,虽然大家还是有意无意避免讨论一些工作上的实际情况,

    但是对於一些消息的传递,比如检查、黑名单的公布还是满积极的

  • 人生应该追求进步还是快乐?

    这难道是二选一的问题吗?不应该是又进步又快乐吗?

    50%进步50快乐不好吗?10%进步90%快乐呢?90%进步10%快乐不好吗?

    进步只能痛苦?

    因为进步代表你脱离舒适圈?所以会痛苦?

    那如果不是完全脱离呢?

起手式-解决Python在windows平台默认编码(encoding)为gbk所导致的open()函数报错及其他编码问题

大叔的python之路 andy 8个月前 (08-16) 2353次浏览 已收录 0个评论 扫描二维码

起手式-解决Python在windows平台默认编码(encoding)为gbk所导致的open()函数报错及其他编码问题

问题起源是在於使用 pyinstaller 打包文件时,发现某些第三方包里面使用 open()打开档案时没有指定编码(encoding)
这将导致我们所有打包的文件里面,如果有中文时就会出现错误。
在简体中文的window默认的编码为 gbk (繁体应该是 big5 吧?观迎吐槽),所以会出现在类似

UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 209: illegal multibyte sequence"

这样的错误

在官方文档说明 open() https://docs.python.org/3/library/functions.html#open
关键的一句话
if encoding is not specified the encoding used is platform dependent: locale.getpreferredencoding(False) is called to get the current locale encoding.
经过九九八十一天的翻查找,
https://docs.python.org/3/library/locale.html#locale.getdefaultlocale
再加上前人足迹,适合的解决方案很快就剩下更改默认的编码这个方式,
代码如下

import _locale 
_locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])

运行时python解释器会取_getdefaultlocale()[1]作为默认编码,经过上方的重写后,会改变当前运行环境下的所有模块的默认编码。
windows平台下,open()函数会默认用utf-8编码打开文件,其实不止open()方法,跨模块、全局改变python解释器的默认编码为utf-8,会带来很多使用上的便利,而不需要被gbk编码报错的噩梦所纠缠。


神隊友學長Andy , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:起手式-解决Python在windows平台默认编码(encoding)为gbk所导致的open()函数报错及其他编码问题
喜欢 (0)
[320208045@qq.com]
分享 (0)
andy
关于作者:
从事软件开发多年的中年大叔, 专精於流程优化, 半退休後钻研投资理财颇有心得
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址