Encode each value in the list to a string:

[x.encode('UTF8') for x in EmployeeList]

You need to pick a valid encoding; don't use str() as that'll use the system default (for Python 2 that's ASCII) which will not encode all possible codepoints in a Unicode value.

UTF-8 is capable of encoding all of the Unicode standard, but any codepoint outside the ASCII range will lead to multiple bytes per character.

However, if all you want to do is test for a specific string, test for a unicode string and Python won't have to auto-encode all values when testing for that:

u'1001' in EmployeeList.values()
Answer from Martijn Pieters on Stack Overflow
🌐
Python documentation
docs.python.org › 3 › howto › unicode.html
Unicode HOWTO — Python 3.14.7 documentation
If you pass a Unicode string as the path, filenames will be decoded using the filesystem’s encoding and a list of Unicode strings will be returned, while passing a byte path will return the filenames as bytes.
🌐
GeeksforGeeks
geeksforgeeks.org › python › python-joining-unicode-list-elements
Python | Joining unicode list elements - GeeksforGeeks
April 27, 2023 - # Python code to demonstrate # Joining unicode list elements # using join() + list comprehension # Initializing list test_list = ['We', 'love', 'Geeksforgeeks'] map(unicode, test_list) # Printing original list print("The original list is : " + str(test_list)) # Join unicode list elements # using join() + list comprehension to res = b':'.join(str(i) for i in test_list) # Printing the result print("The joined string is : " + res)
🌐
python-tcod
python-tcod.readthedocs.io › en › latest › tcod › charmap-reference.html
Character Table Reference - python-tcod 21.2.1 documentation
Unicode is the Unicode code point as a hexadecimal number. You can use chr to convert these numbers into a string. Character maps such as tcod.tileset.CHARMAP_CP437 are simply a list of Unicode numbers, where the index of the list is the Tile Index. String is the Python string for that character.
Top answer
1 of 7
28

Every codepoint has a name, so you are effectively asking for the Unicode standard list of codepoint names (as well as the *list of name aliases, supported by Python 3.3 and up).

Each Python version supports a specific version of the Unicode standard; the unicodedata.unidata_version attribute tells you which one for a given Python runtime. The above links lead to the latest published Unicode version, replace UCD/latest in the URLs with the value of unicodedata.unidata_version for your Python version.

Per codepoint, the unicodedata.name() function can tell you the official name, and unicodedata.lookup() gives you the inverse (name to codepoint).

2 of 7
5

If you want a list of all unicode character names, consider downloading the Unicode Character Database.

It is included in the base repositories of many linux distributions (ex. "unicode-ucd" on RHEL).

The package includes NamesList.txt, which contains the exhaustive list of unicode character names.

Caution: NamesList.txt need some times to be downloaded (size > 1.5 MB).

Example:

21FE    RIGHTWARDS OPEN-HEADED ARROW
21FF    LEFT RIGHT OPEN-HEADED ARROW
@@  2200    Mathematical Operators  22FF
@@+
@       Miscellaneous mathematical symbols
2200    FOR ALL
    = universal quantifier
2201    COMPLEMENT
    x (latin letter stretched c - 0297)
2202    PARTIAL DIFFERENTIAL
2203    THERE EXISTS
    = existential quantifier
2204    THERE DOES NOT EXIST
    : 2203 0338
2205    EMPTY SET
    = null set
    * used in linguistics to indicate a null morpheme or phonological "zero"
    x (latin capital letter o with stroke - 00D8)
    x (diameter sign - 2300)
    ~ 2205 FE00 zero with long diagonal stroke overlay form
🌐
Real Python
realpython.com › python-encodings-guide
Unicode & Character Encodings in Python: A Painless Guide – Real Python
May 20, 2019 - >>> ibrow = "🤨" >>> len(ibrow) 1 >>> ibrow.encode("utf-8") b'\xf0\x9f\xa4\xa8' >>> len(ibrow.encode("utf-8")) 4 >>> # Calling list() on a bytes object gives you >>> # the decimal value for each byte >>> list(b'\xf0\x9f\xa4\xa8') [240, 159, 164, 168] ... The length of a single Unicode character as a Python str will always be 1, no matter how many bytes it occupies.
🌐
TutorialsPoint
tutorialspoint.com › python-joining-unicode-list-elements
Python - Joining unicode list elements
# initializing the list strings = ['Tutorialspoint', 'is a popular', 'site', 'for tech leranings'] def get_unicode(string): return string.encode() # converting to unicode strings_unicode = map(get_unicode, strings) # joining the unicodes result = ' '.join(unicode.decode() for unicode in strings_unicode) # printing the result print(result) If you run the above code, then you will get the following result. Tutorialspoint is a popular site for tech leranings · If you have any queries in the article, mention them in the comment section. Hafeezul Kareem · Updated on: 2020-11-13T18:47:39+05:30 · 435 Views · Related Articles · Python - Joining only adjacent words in list ·
Find elsewhere
🌐
Asmeurer
asmeurer.com › python-unicode-variable-names
Python Unicode Variable Names | A page listing all the Unicode characters that are valid in Python variable names
This page lists all the characters that are valid in Python 3 variable names. In Python 2, variable names could only contain the ASCII characters a-z, A-Z, 0-9, and _, but in Python 3, a much larger set of Unicode characters are allowed.
🌐
w3resource
w3resource.com › python-exercises › list › python-data-type-list-exercise-199.php
Python: Convert a given unicode list to a list contains strings - w3resource
June 28, 2025 - Write a Python program to convert a list of Unicode strings to a list of strings and filter out any that do not start with a letter.
Top answer
1 of 2
3

You can decode those Unicode escape sequences with .decode('unicode-escape'). However, .decode is a bytes method, so if those sequences are text rather than bytes you first need to encode them into bytes. Alternatively, you can (probably) open your CSV file in binary mode in order to read those sequences as bytes rather than as text strings.

Just for fun, I'll also use unicodedata to get the names of those emojis.

import unicodedata as ud

emojis = [
    '\\U0001F600',
    '\\U0001F601',
    '\\U0001F602',
    '\\U0001F923',
]

for u in emojis:
    s = u.encode('ASCII').decode('unicode-escape')
    print(u, ud.name(s), s)

output

\U0001F600 GRINNING FACE 😀
\U0001F601 GRINNING FACE WITH SMILING EYES 😁
\U0001F602 FACE WITH TEARS OF JOY 😂
\U0001F923 ROLLING ON THE FLOOR LAUGHING 🤣

This should be much faster than using ast.literal_eval. And if you read the data in binary mode it will be even faster since it avoids the initial decoding step while reading the file, as well as allowing you to eliminate the .encode('ASCII') call.

You can make the decoding a little more robust by using

u.encode('Latin1').decode('unicode-escape')

but that shouldn't be necessary for your emoji data. And as I said earlier, it would be even better if you open the file in binary mode to avoid the need to encode it.

2 of 2
1

1. keeping your csv as-is:

it's a bloated solution, but using ast.literal_eval works:

import ast

s = '\\U0001F600'

x = ast.literal_eval('"{}"'.format(s))
print(hex(ord(x)))
print(x)

I get 0x1f600 (which is correct char code) and some emoticon character (😀). (well I had to copy/paste a strange char from my console to this answer textfield but that's a console issue by my end, otherwise that works)

just surround with quotes to allow ast to take the input as string.

2. using character codes directly

maybe you'd be better off by storing the character codes themselves instead of the \U format:

print(chr(0x1F600))

does exactly the same (so ast is slightly overkill)

your csv could contain:

0x1F600
0x1F601
0x1F602
0x1F923

then chr(int(row[0],16)) would do the trick when reading it: example if one 1 row in CSV (or first row)

with open("codes.csv") as f:
   cr = csv.reader(f)
   codes = [int(row[0],16) for row in cr]
🌐
GitHub
gist.github.com › arrowtype › 713dad14fe9a574d58d1aab61ba9b2f0
The basics of working with unicode values in Python · GitHub
It prefers unicodedata2 underlyingly and provides some useful, additional tools, such as .script(char: str) -> str for the Unicode character property Script (https://www.unicode.org/reports/tr24/), and the conversion between Unicode Script codes and OTL script tags: .ot_tags_from_script(script_code: str) -> List[str] ↔ .ot_tag_to_script(tag: str) -> str.
🌐
Python Cheat Sheet
pythonsheets.com › notes › basic › python-unicode.html
Unicode — Python Cheat Sheet
The main goal of this cheat sheet is to collect some common snippets which are related to Unicode. In Python 3, strings are represented by Unicode instead of bytes.
🌐
Python
docs.python.org › 3.12 › c-api › unicode.html
Unicode Objects and Codecs — Python 3.12.10 documentation
Split a Unicode string at line breaks, returning a list of Unicode strings. CRLF is considered to be one line break.
🌐
Python
docs.python.org › 3 › c-api › unicode.html
Unicode Objects and Codecs — Python 3.14.7 documentation
PyObject *PyUnicode_Split(PyObject *unicode, PyObject *sep, Py_ssize_t maxsplit)¶ · Return value: New reference. Part of the Stable ABI. Split a string giving a list of Unicode strings. If sep is NULL, splitting will be done at all whitespace substrings. Otherwise, splits occur at the given separator.
🌐
GitHub
gist.github.com › 78ee02de3d5427ca186c2edd5f2714d5
List of all (non-control) Unicode characters with codepoint and Unicode descriptor (as given by python module "unicodedata"). · GitHub
List of all (non-control) Unicode characters with codepoint and Unicode descriptor (as given by python module "unicodedata"). - gen-unicode-list.py