Montag, 19. September 2011

UTF-8 Erkennen

Will man Text im UTF-8 Format einlesen, kann es mitunter eine gute Idee sein zu testen, ob der vorliegende Text überhaupt in UTF-8 vorliegt. Die ersten drei Bytes können schon einen ersten Hinweis darüber geben, da UTF-8 die Definition eines Byte order mark (BOM) erlaubt. Die Vorliegenden bytes, aus denen später ein String entstehen soll, kann also vorab mit einem if(bytes.length > 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) geprüft werden.

Die BOM-Markierung ist aber leider nicht zwingend und deshalb nur ein Anhaltspunkt. Alles weitere lässt sich aber auch nach der Codierung noch herausfinden. UTF-8 definiert einen Replacement-Character, der immer dann Verwendung findet, wenn ein unbekanntes Zeichen vorliegt. Enthält ein String einen Replacement-Character, war die UTF-8 Codierung nicht die richtige. Eine Abfrage kann mit einem einfachen if(s.indexOf('\uFFFD') == -1) erfolgen. Der Character '\uFFFD' ist hierbei der Replacement-Character.

Keine Kommentare:

Kommentar veröffentlichen