Encoding Windows7下的python3.4编码问题у;-\u2014

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

我在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','\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