Encoding Windows7下的python3.4编码问题у;-\u2014
我在python代码中使用了“em-dash”字符,在某个txt文件中用它分割一行Encoding Windows7下的python3.4编码问题у;-\u2014,encoding,python-3.4,Encoding,Python 3.4,我在python代码中使用了“em-dash”字符,在某个txt文件中用它分割一行 with open(path, 'r') as r: number = r.readline() num = number.split(' — ')[1].replace('\n',' — ') 它在ubuntu和python3.4下运行良好,但是在Windows7(python3.4)下运行代码时会出现以下错误 num=number.split('\u2014')[1]。替换('\n','\u
with open(path, 'r') as r:
number = r.readline()
num = number.split(' — ')[1].replace('\n',' — ')
它在ubuntu和python3.4下运行良好,但是在Windows7(python3.4)下运行代码时会出现以下错误
num=number.split('\u2014')[1]。替换('\n','\u2014')索引器:
列表索引超出范围
我确信它应该会起作用,而且问题似乎出在编码上。
如果您能帮我修改程序,我将不胜感激。我试图设置“#--coding:utf-8--”,但没有任何结果
当您执行以下操作时,解决方案是打开的(路径、模式、编码为UTF8):
num = number.split(' — ')[1].replace('\n',' — ')
假设字符串“number”包含破折号,然后取第二个字段([1]),如果number不包含破折号,则[1]不存在,只有[0]存在,并且得到索引超出范围的响应
if ' — ' in number:
num = number.split(' — ')[1].replace('\n',' — ')
else:
num = number.replace('\n',' — ')
此外,由于您现在使用的是Windows,您可能需要检查“\r\n”和“\n”,这取决于在执行以下操作时文件用作行尾字符的内容:
num = number.split(' — ')[1].replace('\n',' — ')
假设字符串“number”包含破折号,然后取第二个字段([1]),如果number不包含破折号,则[1]不存在,只有[0]存在,并且得到索引超出范围的响应
if ' — ' in number:
num = number.split(' — ')[1].replace('\n',' — ')
else:
num = number.replace('\n',' — ')
此外,由于您现在使用的是Windows,您可能需要检查“\r\n”和“\n”,具体取决于文件使用的行尾字符。谢谢您的回答!我同意这看起来像是一个缺席的'他们冲刺',但我肯定,它是在那里。linux下完全相同的代码和文件不会出现任何错误。@如果您喜欢我的答案,我可能会这样做,它适合您;将我的答案标记为答案:-)。。。和/或投票赞成!:-)。。。不客气,我相信答案会比if/else语句短。。。如果我找到了,我会编辑。我认为在windows python下,代码中的符号(“-”)会有不同的解释,这就是为什么它在文件中找不到它的原因。如果你知道编码,你可以在顶部(你的.py脚本的第一行)添加类似于
\u2014
的东西,然后在拆分中使用\u2014
()
谢谢你的帮助。我的解决方案是在打开文件“open(path,mode,encoding='UTF8'时使用ecnoding)“谢谢你的回答!我同意它看起来像是‘em dash’的缺失,但我确信它确实存在。linux下完全相同的代码和文件不会出错。@如果你喜欢我的答案,它对你有效;将我的答案标记为answer:-)。。。和/或投票赞成!:-)。。。不客气,我相信答案会比if/else语句短。。。如果我找到了,我会编辑。我认为在windows python下,代码中的符号(“-”)会有不同的解释,这就是为什么它在文件中找不到它的原因。如果你知道编码,你可以在顶部(你的.py脚本的第一行)添加类似于\u2014
的东西,然后在拆分中使用\u2014
()
谢谢你的帮助。我的解决方案是在打开文件“open(path,mode,encoding='UTF8')时使用ecnoding