在python 3.4.2中读取文件时出现编解码器错误

时间:2015-07-09 09:07:25

标签: python-3.x

我正在使用Python3.4.2并且我看到以下错误,我已经包含了编码类型utf-8并仍然看到错误。

File "C:\Python34(1)\lib\encodings\cp1252.py", line 23, in decode     
   return codecs.charmap_decode(input,self.errors,decoding_table)[0]
   UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 6389:
   character maps to <undefined>

这是读取文件的代码。该文件很大,错误在第916355行引发

with open(filename) as infile:
    lc = 0
    for line in infile:
        lc = lc +1
        print (lc)                                                                                                     
我文件中的

916355916356如下所示,

2015 Jun 30 05:06:09.073049 igmp [7214]: : Received General v2 Query from 40.150.3.1 (Eth3/1), mrt: 10 sec
2015 Jun 30 05:06:11.429282 igmp [7214]: : Send v2 Report for 224.0.1.39 on Eth3/1

1 个答案:

答案 0 :(得分:0)

没有&#34;包含编码类型utf-8。&#34;如果你这样做,你的代码将如下所示:

 $scope.$watchCollection('[user.company_name,user.company_number,user.first_name,user.last_name,user.middle_name,user.salutation]',function(newValue){


      //set individual form inputs to pristine
      if(newValue[0].length > 0 || newValue[1] > 0 ){
            $scope.SignUpForm.first_name.$setPristine();
            $scope.SignUpForm.last_name.$setPristine();
            $scope.SignUpForm.middle_name.$setPristine();
            $scope.SignUpForm.salutation.$setPristine();      
      }

       //set company form inputs to pristine
      if((newValue[2].length > 0) || (newValue[3].length > 0) || (newValue[4].length > 0) || (newValue[5].length > 0)){
            $scope.SignUpForm.company_name.$setPristine();
            $scope.SignUpForm.company_number.$setPristine();
       }});

但这还不够。不幸的是,Windows终端无法使用完整的Unicode。它们通常可以一次处理一个代码页,但不能同时处理整个Unicode范围。

如果这仅用于调试,您可以尝试这样的事情:

with open(filename, encoding='utf8') as infile:  # Put the encoding here
    lc = 0
    for line in infile:
        lc = lc +1
        print (lc)

这会将Unicode字符转换为反斜杠转义序列(print(lc.encode('ascii', errors='backslashescape').decode('ascii')) = U + 1234),并将ASCII字符传递给未更改。

如果您真的关心此输出,则需要确定要使用的编码以及输出方式。使用UTF-8写入文件可能更容易,然后使用支持Unicode的文本编辑器打开该文件(可以告诉记事本在打开的对话框中以UTF-8打开文件)。