1115 Я бы сказал, что любая опасность затмевается успехами. Хотя есть некоторые, в основном связанные с рефакторингом.
namespace
в другое в сочетании с директивами using
может привести к хаосу (загадочные ошибки, которые трудно обнаружить и исправить) - конечно, директивы using
плохи для начала, но нет идеального кода, верно? * Рассмотрим
template class Y;
int main()
{
Y<> * y;
}
//actual definition of the template
class Z
{
};
template //vers 1.1, changed the default from int to Z
class Y
{};
Класс Z
впоследствии был изменен как аргумент шаблона по умолчанию, но исходное прямое объявление все еще с int
.
* Я недавно столкнулся с этим:
Определение:
//3rd party code
namespace A
{
struct X {};
}
и предварительное объявление:
//my code
namespace A { struct X; }
//3rd party code
namespace B
{
struct X {};
}
namespace A
{
using ::B::X;
}
Это, очевидно, сделало мой код недействительным, но ошибка была не в том месте, и исправление было, по меньшей мере, подозрительным.
Предполагая, что Python видит имя как обычную строку, вам сначала нужно декодировать его в Unicode:
>>> name
'Christensen Sk\xf6ld'
>>> unicode(name, 'latin-1')
u'Christensen Sk\xf6ld'
Другой способ добиться этого:
>>> name.decode('latin-1')
u'Christensen Sk\xf6ld'
Обратите внимание на букву «u» перед строки, сигнализируя о том, что она не закодирована. Если вы напечатаете это, акцентированная буква будет отображаться правильно:
>>> print name.decode('latin-1')
Christensen Sköld
BTW: при необходимости вы можете использовать метод de "encode", чтобы превратить Unicode, например, в строку UTF-8:
>>> name.decode('latin-1').encode('utf-8')
'Christensen Sk\xc3\xb6ld'
Я подозреваю, что он действительно работает правильно. По умолчанию Python отображает строки в кодировке ASCII, поскольку не все терминалы поддерживают Unicode. Однако если вы действительно напечатаете строку, она должна сработать. См. Следующий пример:
>>> u'\xcfa'
u'\xcfa'
>>> print u'\xcfa'
Ïa