В Java дженерики являются временем компиляции только данные, которые потеряны во время выполнения. Так, при вызове метода как этот JVM не имела бы никакого способа знать, какой T.class
был. Нормальный способ обойти это состоит в том, чтобы передать объект экземпляра класса в качестве параметра методу, как это:
public static <T> T fromXml(Class<T> clazz, String xml) {
try {
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller um = context.createUnmarshaller();
return (T)um.unmarshal(new StringReader(xml));
} catch (JAXBException je) {
throw new RuntimeException("Error interpreting XML response", je);
}
}
fromXml(SomeSubObject.class, "<xml/>");
Fixed by setting
br._factory.encoding = enc
br._factory._forms_factory.encoding = enc
br._factory._links_factory._encoding = enc
(note the underscores) after br.open()
Я не знаю насчет Mechanize, но вы можете взломать кодеки
, чтобы принять неправильные имена кодировок, которые имеют как 'windows' , так и 'cp':
>>> def fixcp(name):
... if name.lower().startswith('windows-cp'):
... try:
... return codecs.lookup(name[:8]+name[10:])
... except LookupError:
... pass
... return None
...
>>> codecs.register(fixcp)
>>> '\xcd\xe0\xef\xee\xec\xe8\xed\xe0\xe5\xec'.decode('windows-cp1251')
u'Напоминаем'