<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div dir="ltr">
<div>
<div>
<div><a href="http://unicodedata.name">unicodedata.name</a> raises KeyError for a few unicode characters like '\0' or '\n', altough the documentation is very clear on the implementation, this is often not what people want, ie. a string describing the character.<br>
<br>
</div>
<div>In Python 3.3, the name aliases became accepted in unicodedata.lookup('NULL') and '\N{NULL}' == '\N{NUL}'.<br>
<br>
</div>
<div>One could expect that lookup(name(x)) == x for all unicode character but this property doesn't hold because of the few characters that do not have a name (mainly control characters).<br>
</div>
<div><br>
</div>
The use case where the KeyError is raised when a codepoint for a unused character or newest version of unicode is however still useful.<br>
<br>
In the NameAliases <a href="https://www.unicode.org/Public/6.3.0/ucd/NameAliases.txt">
https://www.unicode.org/Public/6.3.0/ucd/NameAliases.txt</a> one can see that some characters have multiple aliases, so there are multiple ways to map a character to a name.<br>
<br>
</div>
I propose adding a keyword argument, to <a href="http://unicodedata.name">unicodedata.name</a> that would implement one of some useful behavior when the value does not exist. In that case.<br>
</div>
<div>
<div><br>
</div>
<div>One simple behavior would be to chose the name in the "abbreviation" list. Currently all characters except three only have one and only one abbreviation so that would be a good pick, so I'd imagine name('\x00', abbreviation=True) == 'NUL'<br>
<br>
The three characters in NameAlias.txt that have more than one abbreviation are :<br>
<br>
'\n' with  ['LF', 'NL', 'EOL']<br>
'\t' with ['HT', 'TAB']<br>
'\ufeff' with ['BOM', 'ZWNBSP']<br>
<br>
</div>
<div>In case multiple abbreviations exist, one could take the first introduced to unicode (for backward compability with python versions). If this is a tie, one could take the first in the list. If it has no name and no abbreviation,
<a href="http://unicodata.name">unicodata.name</a> raises an error or returns default as usual.<br>
<br>
</div>
<div>lookup(name(x)) == x for all x is natural isn't it ?<br>
</div>
<div><br>
</div>
</div>
</div>
</body>
</html>