adapted from https://github.com/jarun/buku/pull/605
--- a/buku
+++ b/buku
@@ -19,10 +19,10 @@
 
 import argparse
 import calendar
-import cgi
 import codecs
 import collections
 import contextlib
+import email.message
 import json
 import locale
 import logging
@@ -3811,15 +3811,17 @@
         if soup.meta and soup.meta.get('charset') is not None:
             charset = soup.meta.get('charset')
         elif 'content-type' in resp.headers:
-            _, params = cgi.parse_header(resp.headers['content-type'])
-            if params.get('charset') is not None:
-                charset = params.get('charset')
+            m = email.message.Message()
+            m['content-type'] = resp.headers['content-type']
+            if m.get_param('charset') is not None:
+                charset = m.get_param('charset')
 
         if not charset and soup:
             meta_tag = soup.find('meta', attrs={'http-equiv': 'Content-Type'})
             if meta_tag:
-                _, params = cgi.parse_header(meta_tag.attrs['content'])
-                charset = params.get('charset', charset)
+                m = email.message.Message()
+                m['content'] = meta_tag.attrs['content']
+                charset = m.get_param('charset', charset)
 
         if charset:
             LOGDBG('charset: %s', charset)
