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