diff options
| -rw-r--r-- | youtube_dl/FileDownloader.py | 5 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 13 | 
2 files changed, 15 insertions, 3 deletions
| diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index e8c62ce07..be70ec755 100644 --- a/youtube_dl/FileDownloader.py +++ b/youtube_dl/FileDownloader.py @@ -454,9 +454,8 @@ class FileDownloader(object):                  self.trouble(u'ERROR: No JSON encoder found. Update to Python 2.6+, setup a json module, or leave out --write-info-json.')                  return              try: -                with io.open(encodeFilename(infofn), 'w', 'utf-8') as infof: -                    json_info_dict = dict((k, v) for k,v in info_dict.items() if not k in ['urlhandle']) -                    json.dump(json_info_dict, infof) +                json_info_dict = dict((k, v) for k,v in info_dict.items() if not k in ['urlhandle']) +                write_json_file(json_info_dict, encodeFilename(infofn))              except (OSError, IOError):                  self.trouble(u'ERROR: Cannot write metadata to JSON file ' + infofn)                  return diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 25b67db06..4e64f327a 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -3,6 +3,7 @@  import gzip  import io +import json  import locale  import os  import re @@ -175,6 +176,18 @@ else:          assert type(s) == type(u'')          print(s) +# In Python 2.x, json.dump expects a bytestream. +# In Python 3.x, it writes to a character stream +if sys.version_info < (3,0): +    def write_json_file(obj, fn): +        with open(fn, 'wb') as f: +            json.dump(obj, f) +else: +    def write_json_file(obj, fn): +        with open(fn, 'w', encoding='utf-8') as f: +            json.dump(obj, f) + +  def htmlentity_transform(matchobj):      """Transforms an HTML entity to a character. | 
