non-breaking utf-8 0xc2a0 espaço e preg_replace comportamento estranho

Na minha string eu tenho utf-8 non-breaking space (0xc2a0) e quero substituí-lo com outra coisa.

Quando eu uso

$str=preg_replace('~\xc2\xa0~', 'X', $str);

funciona bem.

Mas quando eu uso

$str=preg_replace('~\x{C2A0}~siu', 'W', $str);

espaço não quebra não é encontrado (e substituído).

Por quê? O que há de errado com o segundo regexp?

O formato\x{C2A0} está correto, também useiu bandeira.

questionAnswers(5)

yourAnswerToTheQuestion