mikrocontroller.net

Forum: PC-Programmierung SendInput() mit Unicode und Windows


Autor: Sammy D.J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich schreibe gerade einen kleinen Keyboard Simulator und habe jetzt 
festgestellt, dass Windows 7 und Windows 10 offenbar unterschiedliche 
Zeichensätze für Unicode Chars haben.

Eigentlich dachte ich, dass Unicode einheitlich sei?

Also, dass z. B. 0x2661 (Kartenspiel Herz-Symbol in hell) immer gleich 
aussieht.

Leider ist dem nicht so. Unter Windows 10 erhalte ich mein Herz. Unter 
Windows 7 aber nicht.

Ausserdem kann offenbar Windows 10 die Smileys (Unicode > 0xFFFF) 
anzeigen. Bei Windows 7 erhalte ich nur sowas: [].

Hat da jemand eigene Erfahrungen gemacht?

Gruß Sammy D.J.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sammy D.J. schrieb:
> Eigentlich dachte ich, dass Unicode einheitlich sei?

Ist es. Aber damit die infantilen "Emoticons" funktionieren, muss es das 
OS unterstützen. Windows 7 macht das halt nicht.

Andere Zeichen funktionieren, /wenn sie in der verwendeten Schriftart 
enthalten sind/. Nicht jede mit Windows mitgelieferte Schriftart enthält 
den vollständigen Unicode-Zeichensatz.

Autor: Torsten C. (torsten_c) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Windows 7 macht das halt nicht.

?!

Welche Zeichen werden von Windows 7 unterdrückt, wenn sie - wie Du 
schreibst - in der verwendeten Schriftart enthalten sind?

Autor: T.roll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Nicht jede mit Windows mitgelieferte Schriftart enthält
> den vollständigen Unicode-Zeichensatz.

Bisher enthält keine Schriftart den vollständigen Zeichensatz.

Autor: Sammy D.J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Ist es. Aber damit die infantilen "Emoticons" funktionieren, muss es das
> OS unterstützen. Windows 7 macht das halt nicht.

In dem Fall kann ich dann die Fehlersuche einstellen. Allerdings hätte 
ich gedacht, dass sowas per Patch dann nachgeliefert wird.

T.roll schrieb:
> Bisher enthält keine Schriftart den vollständigen Zeichensatz.

Ich hätte auch gedacht, wenn man sich schon die Mühe macht und 
hunderttausende Zeichen katalogisiert und ausarbeitet, dass man dann so 
schlau ist, und alle einfach in eine Datei überträgt, die universell 
lesbar ist. Dann kann man das Ganze auch einfach per Kopie auf jedem 
Rechner und OS installieren (und eben auch als Patch nachliefern).

Gruß Sammy D.J.

Autor: Torsten C. (torsten_c) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sammy D.J. schrieb:
> Rufus Τ. F. schrieb:
>> Ist es. Aber damit die infantilen "Emoticons" funktionieren, muss es das
>> OS unterstützen. Windows 7 macht das halt nicht.
> In dem Fall kann ich dann die Fehlersuche einstellen.

Also bei mir gehen unter Win 7 viele, aber nicht alle.
http://www.typografie.info/3/artikel.htm/wissen/ap...

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sammy D.J. schrieb:
> Ich hätte auch gedacht, wenn man sich schon die Mühe macht und
> hunderttausende Zeichen katalogisiert und ausarbeitet, dass man dann so
> schlau ist, und alle einfach in eine Datei überträgt, die universell
> lesbar ist.

Du scheint das Konzept der Schriftarten ("Font") nicht verstanden zu 
haben. Da reicht nicht eine Datei.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Du scheint das Konzept der Schriftarten ("Font") nicht verstanden zu
> haben. Da reicht nicht eine Datei.

Du hast nicht verstanden, was ich damit sagen wollte:
Wenn man sich die Mühe macht, und jedem erdenklichen Zeichen genau einen 
Zahlencode zuordnet, damit dann auch auf jedem PC immer das gleiche 
Zeichen erscheint, dann bringt das nur was, wenn auch die entsprechenden 
Zeichen von Haus aus auf jedem PC installiert sind. Denn sonst bleibt 
das Alles nur graue Theorie.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du Dir auch nur vage vorstellen, welche Arbeit im Design eines 
Fonts wie der Allerweltsschriftart "Times New" steckt?

Autor: Torsten C. (torsten_c) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Regel reicht es, dass die  Vereinigungsmenge aller Glyphen aus 
allen installierten Fonts die UniCodes möglichst weitgehend abdeckt.

Die Applikationen wie Browser oder Office-Tools suchen sich die Glyphen 
aus einem möglichst ähnlichen Font.

Somit ist die Idee von Klaus eigentlich gelebte Praxis.

Unter Windows kann man Quivira oder Symbola für U+1F600–U+1F64F 
(Emoticons) installieren, siehe z.B. 
http://www.alanwood.net/unicode/fontsbyrange.html

Autor: Sven B. (scummos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> damit dann auch auf jedem PC immer das gleiche
> Zeichen erscheint, dann bringt das nur was, wenn auch die entsprechenden
> Zeichen von Haus aus auf jedem PC installiert sind. Denn sonst bleibt
> das Alles nur graue Theorie.

> offenbar unterschiedliche
> Zeichensätze für Unicode Chars haben.
>
> Eigentlich dachte ich, dass Unicode einheitlich sei?
>
> Also, dass z. B. 0x2661 (Kartenspiel Herz-Symbol in hell) immer gleich
> aussieht.

Das ist nicht die Idee von Unicode. Unicode ordnet einem abstrakten 
Zeichen eine Nummer zu, sonst nichts. Wie das Zeichen dargestellt wird, 
hängt von der Schriftart und der Rendering-Engine ab. Das ist für das 
kleine "a" nicht anders als für das Kartenspiel-Symbol oder irgendwelche 
Emoticons.

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sammy D.J.  schrieb:

>Ausserdem kann offenbar Windows 10 die Smileys (Unicode > 0xFFFF)
>anzeigen. Bei Windows 7 erhalte ich nur sowas: [].

Kann Win7 überhaupt mehr als UCS-2 bzw UTF16? Also mehr als 
16bit-Zeichen?

Autor: Sven B. (scummos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UCS2 ist eine Kodierung für Unicode. Wie jede andere Kodierung für 
Unicode kann UCS2 den kompletten Unicode-Zeichensatz darstellen ...

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens G. schrieb:
> Kann Win7 überhaupt mehr als UCS-2 bzw UTF16? Also mehr als
> 16bit-Zeichen?

UTF-16 hat die Möglichkeit, Zeichencodes mit mehr als 16 Bit mit Hilfe 
mehrerer 16-Bit-Werte zu kodieren: https://de.wikipedia.org/wiki/UTF-16

Was aber nicht impliziert, dass alle Programme (oder alle Poster hier) 
den Unterschied zwischen UCS-2 und UTF-16 kennen ...

: Bearbeitet durch User
Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sven B. (scummos)

>UCS2 ist eine Kodierung für Unicode. Wie jede andere Kodierung für
>Unicode kann UCS2 den kompletten Unicode-Zeichensatz darstellen ...

Nein - nur die ersten 0xFFFF Zeichen. Unicode ist inzwischen weiter als 
nur 0xFFFF.

@ Clemens L. (c_l)

>Jens G. schrieb:
>> Kann Win7 überhaupt mehr als UCS-2 bzw UTF16? Also mehr als
>> 16bit-Zeichen?

>UTF-16 hat die Möglichkeit, Zeichencodes mit mehr als 16 Bit mit Hilfe
>mehrerer 16-Bit-Werte zu kodieren: https://de.wikipedia.org/wiki/UTF-16

Ja. Aber benutzt Win7 UTF16? Eigentlich war es UCS-2, womit Windows (ab 
WiNT, vielleicht auch schon Win95) groß geworden ist.

>Was nicht bedeutet, dass alle Programme den Unterschied zwischen UCS-2
>und UTF-16 kennen ...

Solange die keine 16bit-Zeichen verwenden, die ein Multi-16bit-Zeichen 
markieren, ist das auch erstmal kein Problem ;-)

Autor: Torsten C. (torsten_c) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens G. schrieb:
> Kann Win7 überhaupt mehr als … 16bit-Zeichen?
Hast Du "UnicodeWin7.png" oben gesehen?

: Bearbeitet durch User
Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Torsten C. (torsten_c) Benutzerseite

>Jens G. schrieb:
>> Kann Win7 überhaupt mehr als … 16bit-Zeichen?
>Hast Du "UnicodeWin7.png" oben gesehen?

Ok, dann isses wohl UTF16.

Autor: Torsten C. (torsten_c) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens G. schrieb:
> Ok, dann isses wohl UTF16.
U+1F61A ist wohl UTF16?!

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht der Wert selbst ist UTF16 (der Wert ist nur die Nummer des 
Unicodezeichens), sondern Win7 scheint damit wohl UTF16 zu benutzen, 
wenn es ein solches Unicodezeichen >U+FFFF handlen kann. UCS2 (was in 
früheren Windowsversionen wohl benutzt wurde) könnte das eigentlich 
nicht, da das normalerweise ein reiner Single-16bit-Code ist.

: Bearbeitet durch User
Autor: Sammy D.J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens G. schrieb:
> Nicht der Wert selbst ist UTF16 (der Wert ist nur die Nummer des
> Unicodezeichens), sondern Win7 scheint damit wohl UTF16 zu benutzen,
> wenn es ein solches Unicodezeichen >U+FFFF handlen kann. UCS2 (was in
> früheren Windowsversionen wohl benutzt wurde) könnte das eigentlich
> nicht, da das normalerweise ein reiner Single-16bit-Code ist.

Alle Windows Versionen nehmen UTF16 Zeichen für Unicode > 0xFFFF. Dem 
geht dann aber eine Wandlung des zu großen Zahlenwertes vorraus, so dass 
zwei 16 Bit Werte entstehen - das nennt sich Surrogate Pair. Nach der 
Umwandlung  werden statt einem Wert eben zwei Werte nacheinander 
gesendet.

Autor: Torsten C. (torsten_c) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sammy D.J. schrieb:
> … habe jetzt festgestellt, dass Windows 7 und Windows 10 offenbar
> unterschiedliche Zeichensätze für Unicode Chars haben.

Nur 18 Beiträge später kommt die Auflösung vom TE selbst,
dass unter Win 7 'Surrogate Pairs' verwendet werden.

Ich erinnere mich, dass diese bei VBA nötig sind,
aber dass das mit Win 7 zu tun hat: Wieder was gelernt. :-) Danke.

: Bearbeitet durch User
Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sammy D.J. (Gast)

>Alle Windows Versionen nehmen UTF16 Zeichen für Unicode > 0xFFFF. Dem

Da scheint https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows 
anderer Meinung zu sein, denn da wird UCS2 bei WinNT angegeben.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das dürfte von eher historischem Interesse sein, da die letzte sich 
"Windows NT" nennende Version von Windows NT* schon 1996 herauskam.


*) alle nachfolgenden Versionen von Windows NT nennen sich nicht mehr 
so, sondern verwenden das sehr konsistente Namensschema 
2000->XP->Vista->7->8->10

Autor: Sammy D.J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Torsten C. schrieb:
> Nur 18 Beiträge später kommt die Auflösung vom TE selbst,
> dass unter Win 7 'Surrogate Pairs' verwendet werden.

Da hast Du mich falsch verstanden. Bei Windows 10 musst Du das genauso 
machen. Ich wollte lediglich damit sagen, dass bei Werten > 0xFFFF 
prinzipiell eben zwei Werte < 0XFFFF gesendet werden müssen - egal 
welches Windows. Und die notwendige Umrechnung erfolgt eben über dieses 
Surrogate Pair.

Das war auch nicht die Fragestellung, die da lautete: Warum gehts bei 
Windows 10 und Windows 7 nicht?
Aber das ist ja jetzt auch beantwortet: Nur wenn auch der Zeichensatz 
auf dem Betriebssystem installiert ist, kann auch was angezeigt werden. 
Und da gibt es offenbar Unterschiede zwischen 7 und 10.

Rufus Τ. F. schrieb:
> verwenden das sehr konsistente Namensschema
> 2000->XP->Vista->7->8->10

Da kann ich Dir nur Recht geben: Wirklich sehr konsistent^^

Gruß Sammy D.J.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.