2012-07-10 66 views
-1

我从丹麦文本文件中读取了一些数据。但我似乎无法找到解码的方法。 原文是“多尔”,但在原始文本文件,其存储为“d√Πr”Python解码用'ÆØÅ'解码文件

所以我尝试了明显

InputData = "d√∏r" 
Print InputData.decode('iso-8859-1') 

黯然导致以下错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-6: ordinal not in range(128) 

UTF-8给出了相同的错误。 (使用Python 2.6.5)

我该如何解码这个文本,以便打印的信息是“dør”?

+1

什么版本的python?如果是这样,你也应该解码为utf-8。 – Ben 2012-07-10 13:00:18

+0

版本2和utf-8不起作用。 – Malu05 2012-07-10 13:02:25

+0

2不是Python的版本。 – Ben 2012-07-10 13:02:52

回答

0

C3 B8是“ø”的UTF-8编码。你需要阅读UTF-8编码的文件:

import codecs 
codecs.open(myfile, encoding='utf-8') 

你得到一个UnicodeEncodeError的原因是,你要输出文字和Python不知道是什么编码终端在,所以它默认为ascii。要解决此问题,请使用sys.stdout = codecs.getwriter('utf8')(sys.stdout)或使用环境变量PYTHONIOENCODING="utf-8"

请注意,这会给你的文字为unicode对象;如果您的程序中的其他所有内容都是str,那么您将遇到兼容性问题。将所有内容都转换为unicode或(可能更容易)使用ustr.encode('iso-8859-1')将文件重新编码为Latin-1,但请注意,如果有任何内容位于Latin-1代码页之外,则会中断此文件。将程序转换为内部编码utf-8时使用str可能更容易。

+0

尝试了codec.open,但得到了这个错误UnicodeEncodeError:'ascii'编解码器无法编码字符u'\ xf8'在位置70 – Malu05 2012-07-10 13:38:44

+0

@ user1095570见上文。 – ecatmur 2012-07-10 13:42:20

+0

@ user1095570是的,你必须在使用'unicode'和'str'时保持一致。 – ecatmur 2012-07-10 13:54:14