In my understanding, string in Python 3 is UTF-8, so we should be able to use any unicode code points except private area ones. Then why Unicode literal with u"..."
is still needed?
The PEP 414 has below but not sure what it means.
Python 2 supports a concept of "raw" Unicode literals that don't meet the conventional definition of a raw string: \uXXXX and \UXXXXXXXX escape sequences are still processed by the compiler and converted to the appropriate Unicode code points when creating the associated Unicode objects.
Python 3 has no corresponding concept - the compiler performs no preprocessing of the contents of raw string literals. This matches the behaviour of 8-bit raw string literals in Python 2.