Can we use `unicode(location)` instead of `.html_id()`? That would change serializations but reduce complexity and unnecessary variants. I don't see why we need the `clean` functionality here but not for `_to_string`. Perhaps `_to_string` should call url quote and `_from_string` should do unquote if there's a real requirement, but we already scan for illegal chars I think.