Write only changed characters from OSK

It seems like it doesn't write out null bytes at the end, we've been doing this basically always.

If the game specifies a limit that is actually too long, could've been corrupting memory.  I think this may be #718.

-[Unknown]