I agree, validation with side-effects is bad. Unfortunately, I don't see a way to validate that a string can be encoded as UTF-8, without actually trying to transcode it. There is a `String#ascii_compatible?` method but that won't help us.

We could rename the module/method to be something along the lines of `Normalizer` and `normalize_string`, or `Transcoder` and `transcode_string`?