http://bugs.winehq.org/show_bug.cgi?id=26815
--- Comment #18 from Nikolay Sivov bunglehead@gmail.com 2012-07-07 01:46:38 CDT --- The problem here is that we don't output '<?xml ... ?>' node. Application has its own logic to encode resulting file after it's been saved to stream by msxml3. If libxml2 writes starting prolog (+some additional tracing) log shows:
--- 0009:trace:file:wine_nt_to_unix_file_name L"\??\C:\PROG~FBU\MYRE~2QS.COM\MINI~UDL\config\MiniGolf.cfg.xml" -> "/home/nsivov/.wine/dosdevices/c:/Program Files/MyRealGames.com/Mini Golf/config/minigolf.cfg.xml" 0009:trace:file:CreateFileW returning 0xc 0009:trace:msxml:domdoc_save (0x12a2c0)->({VT_UNKNOWN: 0x9b4388}) 0009:trace:msxml:domdoc_stream_save_writecallback 0x9b4388 0x7d884268 4764 2381. data="\xff\xfe<\x00?\x00x\x00m\x00l\x00 \x00v\x00e\x00r\x00s\x00i\x00o\x00n\x00=\x00"\x001\x00.\x000\x00"\x00 \x00e\x00n\x00c\x00o\x00d\x00i\x00n\x00g\x00=\x00"\x00U\x00T\x00F\x00-\x001\x006\x00"\x00?\x00>\x00\n\x00<\x00r\x00o\x00o\x00t\x00>\x00<\x00r\x00e\x00n\x00d\x00e\x00r\x00e\x00r\x00 \x00m\x00o\x00"... 0024:trace:file:WriteFile 0xc 0xc9d968 1 0xc9d948 (nil) 0009:trace:msxml:domdoc_stream_save_writecallback 0x9b4388 0x7d878f18 0 0. data="" 0024:trace:file:WriteFile "<" 0009:trace:msxml:domdoc_stream_save_writecallback 0x9b4388 0x7d878f18 0 0. data="" 0009:trace:file:WriteFile 0xc 0x32e60c 2965 0x32e5ec (nil) 0009:trace:file:WriteFile "?xml version="1.0" encoding="windows-1251"?>\r\n<root>\r\n <renderer\r\n models_lod="0"\r\n disable="false"/>\r\n <app\r\n dt="0.032"\r\n fixed_rand_seed="false"\r\n rand_seed="0"\r\n sleep_after_tick="0"\r\n physics_dt="0.002"/>\r\n <screen\r\n lx="1024""... ---
So callback writes it as UTF-16 and after that stream implementation flushes it to file (in separate thread) with altered encoding set to 'windows-1251'.
Probably with no encoding specified application encoder don't know what to do.