win下python脚本以unix风格换行保存将会报错为编码问题 SyntaxError: encoding problem:gbk
utf-8与gbk编码都报错
从别人的github拉下来一个python脚本。
直接运行,python报错如下:
File ".\drag_files_do_event.py", line 1
SyntaxError: encoding problem: utf8
打开发现该文件第一行已经使用了注释说明文件编码是utf-8,怀疑是否实际是gbk编码。所以将注释中的编码替换成gbk。并且不放心,还将编码转换成gbk保存。
之后再次运行,依旧报错。
File "drag_files_do_event.py", line 1
SyntaxError: encoding problem: gbk
怀疑是不是我的编辑器有问题,又去尝试用notepad++及VScode分别用utf-8,gbk编码保存。折腾的怀疑人生怀疑世界,百度无果。谷歌我打不开。
问题关键是换行风格的问题
吃完午饭,想着看一下每个字符是啥,于是突然想起了notepad++的查看所有字符功能,发现换行只有LF,是unix风格的换行,而我自己写的能跑起来的脚本,无论是utf-8编码的还是gbk编码的都是CR LF的win风格换行。
于是我将换行风格转为win风格。问题成功解决,脚本能够跑起来。
更进一步的解决类似的问题
上面已经清楚了问题的产生是不同平台下默认的不同风格的EOL产生的问题。
于是我开始思考如何更加优雅的解决这个问题。通过搜索,我找到了git的core.autocrlf这个设置。
# 通过这个设置
git config --global core.autocrlf true
git config --blobal core.safecrlf true
但是,不幸的是我发现了下面这篇文章,并且发现许多人并不推荐开启autocrlf(虽然我看到的文章都类同于这篇)。
https://www.cnblogs.com/zjoch/p/5400251.html#4504140
但我注意到这篇文章算是比较久远,所以我在想这个bug是否已经修复。但不幸的是,由于许多人的文章要不是转发或者引用这篇文章,要不就是打着原创的雷同的剽窃的文章。
我花费了一方力气阅读了不少社区的文章,以及自己亲手测试之后。我还是做出了上面的选择。
https://stackoverflow.com/questions/3206843/how-line-ending-conversions-work-with-git-core-autocrlf-between-different-operat
Adi Shavit 的回答测试了各种平台各种选项值的表现。但是,注意测试时间(12年)可能会比较久远一些。
而 pratt 的回答更近一些(16年)。则指出和平台无关,并与win下设置autocrlf为true,linux设为false进行测试。但是其没有测试混合的情况。
基于上面的情况,我自己测试了一下win下提交和拉取的情况。
测试时间 2020年2月24日
测试版本 git version 2.21.0
测试平台 win10
测试选项
core.autocrlf=true
我自己测试了windows平台下的commit和pull,发现autocrlf开启的时候,win下纯CRLF的文件或CRLF和LF混合的文件提交到库中都能正常的变成纯LF风格的文件(符合预期)。对于拉取,则都能正常的将LF都转换为CRLF风格(符合预期)。
但是对于纯CR风格的文件或者混有CR风格换行的文件,则git不会对其进行转换。
此时,两个小时被花费掉了,感觉过于浪费。又突发奇想在知乎搜索了一下相关的问题。
算是看到了一篇算比较理性的文章,那是git如何避免”warning: LF will be replaced by CRLF“提示? - Andy Deng的回答 - 知乎
突然感觉如果我早点想到去知乎搜一搜的话,就不必浪费两个多小时了。
一些心得
- 注意信息的时效性,保持怀疑
- 不要人云亦云,需要结合自身实际情况
- 优先考虑从比较优质的社区搜寻答案
- 可以多从官方文档或者根据自身情况动手实验确定自己的解决方案。
win下python脚本以unix风格换行保存将会报错为编码问题 SyntaxError: encoding problem:gbk的更多相关文章
- eclipse中运行python脚本中有注释为中文的内容,报错:SyntaxError: Non-ASCII character '\xe5'
'''Created on 2015年7月2日 @author: liujuan'''import sysreload(sys) 以上为注释的有个日期中文的,结果运行报错:SyntaxError: N ...
- Jmeter录制脚本过程及Could not create script recorder报错、您的连接不是私密连接报错
转载自 https://www.cnblogs.com/wwho/p/7173172.html Jmeter录制脚本过程及Could not create script recorder报错.您 ...
- linux 下通过xhost进入图形界面,经常会出现报错“unable to open display”
linux 下通过xhost进入图形界面,经常会出现报错“unable to open display” linux下的操作步骤如下: [root@localhost ~]# vncserver N ...
- win 下 python ImportError: No module named requests
第一次弄爬虫,报库找不到,网上找了半天,一般都让都让改成绝对路径...那不是饮鸩止渴嘛. 然后 在无意中发现,不需要控制台输入pip命令,因为不是在Linux下啊,,win下直接在pycharm里添加 ...
- python (3):wxPython打包app,报错
1,打包app报错 如图: 使用py2app,mac下打包成app.异常.程序直接退出. 没有详细的错误信息,client程序直接崩溃了. 2.原因 代码没有几行: #!/usr/bin/python ...
- Appium+python自动化54-appium-doctor报错已解决(SyntaxError: Unexpected token ...)
前言 由于新版的appium desktop版本是不带appium-doctor这个包的,所以想用appium-desktop检查环境的话需要另外的安装了,在安装的时候小编又遇到了一个坑 报错信息:S ...
- Python处理验证码第一篇(pytesser初探及报错处理)
(原文链接:http://blog.csdn.net/Bone_ACE/article/details/50436587) 前言: 春节期间,无法全身心投入地去写爬虫,那就玩玩验证码吧,应该比较有趣! ...
- Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
本文为霍格沃兹测试学院学员学习笔记. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...
- 解决python 导入selenium 库后自动化运行成功但是报错问题
本章节开始进入自动化的基础教学了,首先我们要对我们的工具有一定的熟练使用程度,做自动化常用的工具一个是搭建 RobotFramework自动化框架,另外一个便是我们最常用的python 工作原理是比较 ...
随机推荐
- (.text+0x18): undefined reference to `main'
在将VS中的程序移植到ubuntu中出现的一个问题,主要原因是在vs中默认的主函数写成int _tmain(), 而在gcc编译时要找的是int main().改过来就可以了.
- 【vue_django】成功登录后,保存用户
PS:使用session 保存: // 登录 login() { if (this.username === "" || this.password === "" ...
- iNeuOS工业互联平台,iNeuKernel(物联网核心组件)远程控制标准化设计与实现。发布v2.3版本。
目 录 1. 概述... 2 2. 平台演示... 2 3. 控制端与iNeuKernel的交互协议... 3 4. 设备驱动实现控制业务... 4 ...
- 快乐编程大本营【java语言训练班】 6课:用java的对象和类编程
快乐编程大本营[java语言训练班] 6课:用java的对象和类编程 第1节. 什么是对象和类 第2节. 对象的属性和方法 第3节. 类的继承 第4节. 使用举例:创建类,定义方法,定义属性 第5节. ...
- 实验13:VLAN/TRUNK/VTP/
实验10-1: 划分VLAN Ø 实验目的通过本实验,读者可以掌握如下技能:(1) 熟悉VLAN 的创建(2) 把交换机接口划分到特定VLAN Ø 实验拓扑 实验步骤要配置VLAN,首先要 ...
- Pycharm2019.1.1永久破解
声明:不做商业用途,电脑系统win10专业版,亲测有效. 1,下载新版破解补丁+安装包 网盘链接 提取码:hn0u 下载补丁文件 jetbrains-agent.jar 并将它放置到 pycharm安 ...
- HDU4192 Guess the Numbers(表达式计算、栈)
题意: 给你一个带括号.加减.乘的表达式,和n个数$(n\leq 5)$,问你带入这几个数可不可能等于n 思路: 先处理表达式:先将中缀式转化为逆波兰表达式 转换过程需要用到栈,具体过程如下:1)如果 ...
- Mysql:自动化备份
简介 在这个数据为王的时代,数据的备份十分重要,这里就分享一篇mysql数据库自动备份的脚本(是从网上搜到的),其将配置文件和备份脚本分离,提高了安全性,脚本风格规范严谨,分享给大家希望对需要的小伙伴 ...
- centos6.5下oracle11g下OGG单向复制
命名规范: local==> l remote==> r extract==> x data pump==> p ------------------------------- ...
- 磁盘文件系统管理与LVM逻辑卷
一.磁盘以及分区管理 无论是Linux系统还是Windows系统.当现有硬盘的规划不能满足当前需求时.我们就需要将其重新规划和调整 实现上述操作我们就需要用到fdisk磁盘及分区管理工具.此工具是大多 ...