#31 refactor UTF-8 checker and fix that IsUTF8() cannot distinguish invalid encoded bytes