Как зафиксировать кодирование в Python, Механизируют?

В 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/>");
5
задан nosklo 6 October 2009 в 13:28
поделиться

2 ответа

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()

2
ответ дан 14 December 2019 в 19:18
поделиться

Я не знаю насчет 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'Напоминаем'
3
ответ дан 14 December 2019 в 19:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: