X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;ds=sidebyside;f=Robots%2Fbkmk_rurllib_py3.py;h=9493a589556a2aaeba7a88925a8b6a27344cfb3b;hb=1f50f0961e4437d8306f541bce4fee0fa37301d7;hp=796a6fca3425bfb8d91d035968d02be246605bb3;hpb=5e3685956769a46ded587d33d5cb69ca4d0bbe7a;p=bookmarks_db.git diff --git a/Robots/bkmk_rurllib_py3.py b/Robots/bkmk_rurllib_py3.py index 796a6fc..9493a58 100644 --- a/Robots/bkmk_rurllib_py3.py +++ b/Robots/bkmk_rurllib_py3.py @@ -11,6 +11,8 @@ __license__ = "GNU GPL" __all__ = ['robot_urllib_py3'] +import http.client +import socket import sys import urllib.request @@ -53,6 +55,9 @@ class MyURLopener(urllib.request.URLopener): fp.close() raise IOError(('http error', errcode, errmsg, headers)) + def open(self, fullurl, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): + return urllib.request.URLopener.open(self, fullurl, data) + urllib.request._opener = opener = MyURLopener() @@ -102,15 +107,41 @@ class robot_urllib_py3(robot_base): # Remove Accept-Charset del opener.addheaders[-1] - infile = open(fname, 'rt') - content = infile.read() - infile.close() - + possible_encodings = [] + for encoding in ( + bookmark.charset, + sys.getfilesystemencoding(), + 'utf-8', + ): + if encoding and encoding not in possible_encodings: + possible_encodings.append(encoding) + content = None + for encoding in possible_encodings: + infile = open(fname, 'rt', encoding=encoding) + try: + content = infile.read() + except UnicodeDecodeError: + infile.close() + continue + else: + break + infile.close() + + if content is None: + return ( + 'ERROR: File encoding was not recognized', + None, None, None, None + ) return None, None, None, headers, content except RedirectException as e: return None, e.errcode, e.newurl, None, None + except (OSError, http.client.IncompleteRead) as e: + error = str(e) + self.log(' Error: %s' % error) + return error, None, None, None, None + except IOError as e: if (e[0] == "http error") and (e[1] == -1): error = None