Your text seems to written out as Unicode (specifically UTF8) just fine.
Remember that a CSV file is nothing but bytes, so reading it correctly requires writer and reader to agree on encoding.
If you put a UTF8-encoded character (U+2019) the reader must also understand the same encoding, and agree to use it. If not, you will get "mojibake". This doesn't mean the content is wrong (or changed). It's just encoded in a format your reader does not expect.
Obviously you are using a western character set. If your computer was set to, say, Russian, your output would be different.
Can you reveal what you use to read the file created ? Maybe you should put BOM marks as suggested in a comment above ? This tells readers that do understand UTF8 that this is in fact a UTF8 file. Note: Readers that don't understand BOM marks may display these as unreadable characters.
If you have to use a legacy reader for this file, one solution may be to parse the file with iconv or similar tool.
’
https://unicode-table.com/en/2019/
UTF8 encoded:
E2 80 99 hex
226 128 153 decimal
Read as Windows 1252
6’2
â = E2
€ = 80
™ = 99