"€" Euro character not displaying properly
The € (euro) symbol is a three byte character, with byte values in file (UTF-8) of 0xE2, 0x82, 0xAC.
Sometimes, if the character encoding is not set consistently among all participating entities of the system, Confluence, server and the database, one may experience strange behavior.
I write a page with a Euro sign in it (€). All is well, the Euro sign shows up in the wiki markup text-box, and the preview, and the display of the saved page.
One day later, the Euro sign has changed into a question mark upside down!
What is going on? Why does the Euro sign mysteriously change? How do I prevent it?
Interestingly enough the character encoding test passes with no problems, demonstrating that Confluence and the connected Database both recognize the € symbol.
There are two potential reasons for this behavior:
Database and Confluence is using utf-8 encoding. The connection is not.
When data transferred to it via the connection which does not use utf-8 encoding gets encoded incorrectly. Hence, updating the connection encoding may resolve this problem from now on, yet it probably would not affect already existing data.
Database is not using utf-8. Confluence and your connection are.
If your Database encoding is not set to UTF-8, yet is using some other encoding such as latin1, it could be one of the potential reasons why you lose the "€" characters at some stage. It could be occurring due to caching. When Confluence saves data to the database, it may also keep a local cached copy. If the database encoding is set incorrectly, the Euro character may not be correctly recorded in the database, but Confluence will continue to use its cached copy of that data (which is encoded correctly). The encoding error will only be noticed when the cache expires, and the incorrectly encoded data is fetched from the database.
For instance the latin1 encoding would store and display all 2-byte UTF8 characters correctly except for the euro character which is replaced by '?' before being stored. As Confluence's encoding was set to UTF-8, the 2-byte UTF-8 characters were stored in latin1 database assuming that they were two latin1 different characters, instead of one utf8 character. Nevertheless, this is not the case for 3-byte utf8 characters, such as the Euro symbol.
Please ensure that you set the character encoding to UTF-8 for all the entities of your system as advised in this guide.