Skulpt is "a Python implementation in JS". It doesn't have built-in DOM bindings - it's typically used within a project like Anvil or Trinket which provides higher-level (and therefore more Pythonic) modules for display/input/IO. Skulpt code can block, which also helps keep those APIs simple.
I guess my summary would be that Brython is great for scripting your HTML in Python rather than Javascript, but Skulpt is best for providing a Python runtime in your app. Does that make sense? (Of course, you'd have to ask a Brython developer for their take on it ;) )
But it doesn't understand any of the new syntax added by python3 yet.
But in Skulpt the strings don't quite work like any of the Python versions.
Python 2 has a combined str/bytes type and a separate Unicode string type:
>>> type("hello") is type(u"你好")
False
>>> len(u"你好")
2
>>> len("你好")
6
...whereas in Python 3 the str type is Unicode and the "bytes" type is a completely separate thing: >>> type("hello") is type(u"你好")
True
>>> len(u"你好")
2
>>> len("你好")
2
Skulpt actually seems to work more like Python 3, except that 1) there is no way at all to work with bytes (that I can find), e.g. no encode/decode methods, and it 2) requires the "u" prefix if literals contain non-ASCII characters, even though the type of the resulting string is the same as without the prefix: >>> type("hello") is type(u"你好")
True
>>> len(u"你好")
2
>>> len("你好")
SyntaxError: invalid string (possibly contains a unicode character) on line 1