agree with graff that you need to rework your approach/handling...as you'll never correctly wrestle utf-8 into Latin1 every time. So going utf-8 in the db is likely the go.
as for why sql_ascii setting doesn't give errors..it probably takes every single byte at a time on input and shamelessly shoves it into the varchar/lob field. but that shouldn't really enter the equation...as you're trying to stuff a wider set (utf-8) into a narrower set (latin1...or ascii, or whatever), which is inherently non-trivial or even non-sensical.