2014-10-08 57 views
0

我有一些字符串作为测试数据粘贴到我的脚本中。这些字符串来自包含编码字符的电子邮件,它会抛出一个SyntaxError。到目前为止,我一直无法找到解决这个问题的办法。当我print repr(string),我得到这些字符串:解码包含编码字符的字符串

'Total Value for 1st Load \xe2\x80\x93 approx. $75,200\n' 
'Total Value for 2nd Load \xe2\x80\x93 approx. $74,300\n' 

而这个错误弹出,当我运行我的脚本:

SyntaxError: Non-ASCII character '\xe2' in file <filename> on line <line number>, but no 
encoding declared; see http://www.python.org/peps/pep-2063.html 

当我刚打印出含有编码字符的行我得到这个:

'Total Value for 2nd Load – approx. $74,300' 

的数据是这样的,当我从电子邮件复制:

'Total Value for 1st Load – approx. $75,200' 
'Total Value for 2nd Load – approx. $74,300' 

从我的搜索中,我相信它是用utf-8编码的,但是我不知道如何基于某些字符被编码的事实来处理这些数据,但其中大多数不是(也许?)。我尝试了迄今为止发现的各种“解决方案”。包括增加# -*- coding: utf-8 -*-给我的脚本的顶部和脚本只是挂起...它没有做任何事情:(

如果有人能提供关于如何处理这种情况的一些信息,这将是惊人的。

我一直在使用string.encode()string.decode()试图解码和编码,使用基于什么我能找到谷歌不同的编码,但是这并没有解决问题。

我真的喜欢一个Python的解决方案,因为这个项目我m的工作需要人们将数据粘贴到GUI中的文本框中,然后处理该数据。其他解决方案建议粘贴t他将数据转换成单词或记事本,将其保存为纯文本,然后再从该文件复制/粘贴。这有点多。有人知道处理这个问题的pythonic方式吗?

+0

*所有*您的字符编码。恰巧,UTF-8编码的前128个字符是由ASCII编码的完全相同的字符。所以'T'在ASCII和UTF-8中都是'\ x84',Python总是显示ASCII字符而不是字节值。 – 2014-10-08 21:22:20

+0

打印时看到的内容称为[Mojibake](http://en.wikipedia.org/wiki/Mojibake); UTF-8字节解释错误,因为您的控制台可能设置为Windows代码页1252. – 2014-10-08 21:34:00

+0

添加'# - * - coding:utf-8 - * - '作为源的第一行或第二行应该已经工作,没有做任何事情。有些东西你没有告诉我们。 – 2014-10-08 21:45:50

回答

1
>>> msg = 'Total Value for 1st Load \xe2\x80\x93 approx. $75,200\n' 
>>> print msg.decode("utf-8") 
Total Value for 1st Load – approx. $75,200 

确保你使用类似的空闲,可以支持这些字符(即DOS终端可能不会!)

+0

好吧,我的代码中有一些其他错误,这让我认为编码不起作用,但这是我的错误。这是正确的答案。 – DuckPuncher 2014-10-09 00:03:37