However, there's more to it than that. As you know, &nbsp; is a "no-break space" -- always, no exceptions, no matter where in the world you are. &#160; is what? Charater number 160 in the current character table. What exactly does that mean? Well, that depends on what your character set is. For anyone with a latin based alphabet character number 160 is a no-break space. Luckily, there seems to be no difference between different character sets on this matter. Thus, &nbsp; == &#160; == &#xA0; == no-break space. But, that's only the case for this single character entity. We cannot assume anything about character entities being equal to a numeric character reference. If you wish to use a numeric reference you should always use the unicode numeric reference, or else you may run into unexpected behavior.

If the character reference begins with "&#x", the digits and letters up to the terminating ; provide a hexadecimal representation of the character's code point in ISO/IEC 10646. If it begins just with "&#", the digits up to the terminating ; provide a decimal representation of the character's code point.

...

All text that is not markup constitutes the character data of the document.

...

The ampersand character (&) and the left angle bracket (<) may appear in their literal form only when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. They are also legal within the literal entity value of an internal entity declaration; see "4.3.2 Well-Formed Parsed Entities". If they are needed elsewhere, they must be escaped using either numeric character references or the strings "&amp;" and "&lt;" respectively.

I did not try escaping the character - you can if you think it is worth it.