UnicodeDecodeError从文件

时间:2018-01-19 15:42:28

标签: python-3.x file binary refactoring

我在Ubuntu(Jessie)上运行Python3。并重构一些最初在Python2.7中编写的代码。

我有一个UTF-8 Unicode文本文件......

$ file /home/(smip)/hg19.json
/home/(smip)/hg19.json: UTF-8 Unicode text

在旧代码中......

#!/usr/bin/env python3
# -*- coding: utf-8
(...snip...)
with open(filename) as fh:
    return json.load(fh)

在尝试打开文件时导致错误...

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 510: ordinal not in range(128)

更改代码以指定utf-8,如此...

with open(filename, "r", encoding="utf-8") as fh:
    return json.load(fh)

...解决了这个错误

我的问题是:

  1. 不管Python 3能够打开unicode文件而没有编码=" utf-8",感谢shebang?
  2. 如果没有,为什么不呢?

1 个答案:

答案 0 :(得分:1)

  1. coding: utf-8评论是源代码文件的encoding declaration。 Python 3的默认值是UTF-8。
  2. open()使用的默认编码取决于locale
  3. 如果您想让用户决定编码,或者在打开数据时将其明确设置为LC_ALL=en_US.utf-8,则可以在外部设置utf-8