character encodings are hard