JSONDecodeError:意外的UTF-8 BOM:在bash中显示问题?

时间:2017-10-25 13:45:44

标签: python json bash utf-8

我想分析.jsonl文档中的文本(使用Python 3)。只要文本是英文的,我正在运行的代码工作正常,但对于阿拉伯文本文件,我收到错误消息: json.decoder.JSONDecodeError:意外的UTF-8 BOM(使用utf-8-sig解码):第1行第1列(char 0)

我通读了一些线程并认为我可能需要解码它,我将.decode(utf-8-sig)添加到json.loads(参见代码)。这样做,导致以下错误消息: AttributeError:'str'对象没有属性'decode'

我还在〜/ .bashrc中将LANG设置更改为utf8,以防它与bash终端无法正确显示字符但错误相同。

这里的代码和提前感谢!

import sys 
from collections import Counter 
import json

def get_hashtags(tweet): 
  entities = tweet.get('entities', {}) 
  hashtags = entities.get('hashtags', []) 
  return [tag['text'].lower() for tag in hashtags] 


if __name__ == '__main__': 
  fname = sys.argv[1]
  with open(fname, 'r') as f: 
    hashtags = Counter() 
    for line in f: 
      tweet = json.loads(line.decode('utf-8-sig'))
      hashtags_in_tweet = get_hashtags(tweet) 
      hashtags.update(hashtags_in_tweet) 
    for tag, count in hashtags.most_common(20): 
      print("{}: {}".format(tag, count))

1 个答案:

答案 0 :(得分:2)

你可以在Python 2和Python 3中使用支持on fly(通过encoding参数)解码的io.open(实际上,在Python 3中,io.open是默认的{{ 1}}):

open