Ich würde gerne eine Reihe von ASCII-Zeichen von Unicode-Zeichen unterscheiden… Leider habe ich keine Ahnung wie ich das in C/C++ machen soll bzw. ich weiß nicht ob das überhaupt geht ! Deshalb wäre ich sehr dankbar wenn jemand eine Idee hat wie man das tun könnte (wenn das überhaupt geht)
Du kannst aufgrund der Bytes in der Datei begründete Vermutungen anstellen, aber es bleibt geraten.
Einer der Gründe ist, dass die ASCII-Zeichen als solche im weit verbreiteten UTF-8 Unicode mit enthalten sind. Du weißt also erst, dass es kein reines ASCII ist, wenn das typische UTF-8 Escapezeichen (das einen 2-Byte Code-Point einleitet) mitten in einem Wort vorkommt. Diese UTF-8 Escapezeichen sind im reinem ASCII Sonderzeichen ( > 127) und kommen normaler Weise nicht mitten in Wörtern vor.
[Edit]Wenn die Datei am Anfang einen BOM hat wird die Sache eindeutig, aber gerade bei UTF-8 wird gern darauf verzichtet…[/Edit]
Bei asiatischen oder arabischen Texten ist das natürlch einfacher, weil die keine reinen ASCII-Zeichen kennen.
In „reinem ASCII“ gibt es keinen Code größer 127. Das mit den Sonderzeichen ab 128 ist eine (weit verbreitete?) Mär. Wenn es rein um die Unterscheidung zwischen UTF-8 und ASCII geht, reicht es also, wenn in irgend einem Byte das höchste Bit gesetzt ist. Gibt es ein solches nicht, ist kein Unterschied feststellbar.
Achja, und wer ein BOM bei UTF-8 benutzt, der frisst auch kleine Kinder.
[quote=musiKk]In “reinem ASCII” gibt es keinen Code größer 127.[/quote]Wenn wir dem reinen Standard folgen hast Du recht, ASCII definiert keine Codes >127.
Das Erkennen eines CharacterEncodings war immer schon ein Sch***, unser Glück, dass gewisse Leute das schon halbwegs gelöst haben - die Browserhersteller nämlich: