Quote Originally Posted by masonwheeler
The Unicode is a big problem with old code, because they changed the default string and char types to Unicode versions, which means any old code that assumes that sizeof(char) = 1 is now broken. This is not a setting that can be changed; there's no "compatibility mode" because the changes run too deep; the entire VCL and RTL are redone in Unicode.
Yep, any String is now an Unicode string, and as you write sizeof(char) = 1 is false now. Strings in Delphi 2009 are UTF-16 based, since that is the native Windows Unicode encoding.

The old WideString remains as a COM type.

Anyway...

Quote Originally Posted by masonwheeler
Backwards compatibility is completely broken and everything with char-size handling in it has to be redone now.
as far as I know (can't test because I don't have D2009) that's not entirely true. While you may need to change your code, some have suggested to try and simply change any String that you need to behave as before to AnsiString type.

Some information and references

http://delphi.wikia.com/wiki/Tibur%C3%B3n

These are 3 articles by Nick Hodges, CodeGear's Delphi Product Manager on "unicodifying" your code. I haven't read them yet, but they seem to cover a fair bit of cases.

http://dn.codegear.com/article/38437 - Part I
http://dn.codegear.com/article/38498 - Part II
http://dn.codegear.com/article/38693 - Part III

Hope this helps.