ASCII von Unicode unterscheiden

#1

Hi zusammen

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)

Vielen Dank für jede Art von Hilfe

LG Coretool!

#2

Es geht nicht.

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.

bye
TT

#3

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. :wink:

#4

[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.

[quote=musiKk;103402]Das mit den Sonderzeichen ab 128 ist eine (weit verbreitete?) Mär.[/quote]IBM und Microsoft sind also einer Mär aufgesessen? http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#Erweiterungen

bye
TT

#5

Ne, sie haben eigene Kodierungen definiert. Steht doch im verlinkten Artikel?

#6

[quote=musiKk]Ne, sie haben eigene Kodierungen definiert.[/quote]Eben, sind ASCII-Codes >127 also doch keine Mär.

bye
TT

#7

Was wenn man die Zeichen in die Registry kopiert ? Die akzeptiert keine ASCII-Kodierung, oder ?

#8

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:

In Java hätten wir den https://code.google.com/p/juniversalchardet/

möglicherweise kannst du ja in C/C++den Original-Code von Mozilla verwenden:

http://lxr.mozilla.org/seamonkey/source/extensions/universalchardet/