]> git.phdru.name Git - dotfiles.git/blob - bin/get_html_encoding.py
Feat(recode-filenames-recursive): Allow to omit parameters
[dotfiles.git] / bin / get_html_encoding.py
1 #! /usr/bin/env python3
2
3 from m_lib.net.www.html import HTMLParser as _HTMLParser
4
5 class HTMLHeadDone(Exception): pass
6
7 class HTMLParser(_HTMLParser):
8    def end_head(self):
9       raise HTMLHeadDone()
10
11    def do_meta(self, attrs):
12       http_equiv = ""
13       content = ""
14
15       for attrname, value in attrs:
16          if value:
17             value = value.strip()
18             if attrname == 'http-equiv':
19                http_equiv = value.lower()
20             elif attrname == 'content':
21                content = value
22
23       if http_equiv == "content-type":
24          try:
25             # extract charset from "text/html; foo; charset=UTF-8; bar;"
26             self.charset = content.lower().split('charset=')[1].split(';')[0]
27          except IndexError:
28             pass
29          raise HTMLHeadDone()
30
31
32 def parse_html(filename):
33    infile = open(filename, 'r')
34    parser = HTMLParser()
35
36    for line in infile:
37       try:
38          parser.feed(line)
39       except HTMLHeadDone:
40          break
41
42    infile.close()
43
44    try:
45       parser.close()
46    except HTMLHeadDone:
47       pass
48
49    if hasattr(parser, "charset"):
50       parser.charset = parser.charset.replace("windows-", "cp").lower()
51
52    return parser
53
54
55 if __name__ == '__main__':
56    try:
57       import sys
58       parser = parse_html(sys.argv[1])
59       if hasattr(parser, "charset"):
60          print(parser.charset)
61       else:
62          import chardet
63          charset = chardet.detect(open(sys.argv[1]).read())["encoding"]
64          if charset in ("ISO-8859-2", "MacCyrillic"):
65             charset = "cp1251"
66          print(charset)
67    except:
68       pass