On input you take what you're given, but on output, you have to make a policy decision. This is somewhat orthogonal to the issue of laziness, however. To the first approximation it doesn't really matter when we do the conversion, as long as the user sees a consistent semantics. I think we can have our cake and eat it too if we are very careful to distinguish semantics from representation. That being said, I don't think we can easily predict how many passes we're going to make over the data, and we're going to be making many passes over the same data, it's more efficient to convert once at the beginning than to emulate one character set in another each time.
Emulation has the advantage of keeping the old representation around as long as possible, however.