I'm confused..... ;-)
So what am I supposed to do if I want to show ANSI Char #182 (¶) ?
I thought the ANSI Table is a language independent standard and going from 0..255, and is ASCII compatible from 0..127.
You're right, this Unicode stuff seems more complicated than it should be.
Traditionally with Delphi and its AnsiString-based VCL, few people worried about Unicode since they could pass upper-ASCII chars and see them properly displayed on their screen. But several of the widgetsets (Carbon, GTK2, Qt) require that all strings passed to the LCL be UTF8 encoded, meaning you can't send an upper-ASCII char to the LCL as a single byte. This has the benefit of full Unicode support, although as you've discovered most of the problems occur with the upper-ASCII chars (what's called the "Latin-1 Supplement").
The char you're asking about is ANSI $B6. The UTF-16 value for this char is $00B6. And the UTF-8 value for this char is $C2B6. All chars in the Latin-1 Supplement have C2 for the first byte of their UTF8 encoded forms and the ANSI value for the second byte.
One problem is that if you have existing code, you'll need to find all the places where you're sending strings to the LCL and use something like AnsiToUTF8 on them if the widgetset requires UTF8, but don't encode them for Win32 (although this will probably change someday, even with Delphi) or GTK1. With Win32 and GTK1, just pass the strings on unchanged, with any upper-ASCII chars embedded in them.
Sekel is correct that there are others complications possible, including BOM and strings embedded in the executable. One advantage to this approach, though, is that it allows to continue using the more efficient AnsiString instead of WideString.
Thanks.
-Phil