Geistiger Hohlraum: Alle komischen Zeichen finden

Beitrag lesen

wie kann man in einer Datenbank alle Zeichen finden, die nicht im UTF-8 Format kodiert sind.

Wenn man davon ausgehen kann, dass Du nicht verschiedene Kodierungen innerhalb eines Strings benutzt hast (mit ziemlicher Sicherheit, denn sonst wäre der ganze String unbrauchbar), müsstest Du utf-8-Strings mit folgendem PCRE-Muster erkennen können:

^([\x00-\x7f]|[\xc0-\xd5][\x80-\xbf]|[\xc0-\xd5][\x80-\xbf]{2}|[\xc0-\xd5][\x80-\xbf]{3}|[\xc0-\xd5][\x80-\xbf]{4}|[\xc0-\xd5][\x80-\xbf]{5})*$

utf-8 folgt dem Schema "entweder ein einzelnes Byte 0 bis 7f oder ein Startbyte größer als c0 gefolgt von einem bis fünf Folgebytes zwischen 80 und bf, abhängig vom Startbyte" (alle Werte in Hex).

Falls die Datenbank irgendwie mit regulären Ausdrücken umgehen kann, sollte das Muster alle utf-8-Strings herausfiltern können und mit einem NOT davor entsprechend alle Nicht-utf-8-Strings. Vielleicht musst Du statt der \xnn-Sequenzen die Zeichen direkt eingeben, dass sollte aber mit chr() oä auch kein Problem sein.