I did not yet find a way to automatically determine the encoding of a file/data but would be very happy to have something for a at least good guessing.
While sadly files with unknown encodings are not rare, IMHO guessing encodings should be a matter of last resort, much better is to find out how the files were generated and get their encoding from there. But if you really don't know the encoding of the input files, you could use a module like Encode::Guess, or I've written a tool that tries to be a little smarter: enctool - it allows you to narrow down the guesses by specifying what characters are expected to appear in the input file using e.g. the --one-of='\xFC' option (which in this case will look for U+00FC LATIN SMALL LETTER U WITH DIAERESIS ("ü"); you can specify multiple possible characters).
And I must second the opinion that XML::Simple shouldn't be used. For full-fledged XML support, I'd suggest XML::LibXML, or for a XML::Simple replacement, have a look at XML::Rules.