Frage

Ist es möglich, Unicode-Eingabe in eine Konsolenanwendung zur Verfügung zu stellen, und lesen Sie das Unicode-Zeichen / Zeichenfolge über Console.ReadKey ()?

Ich weiß Unicode funktioniert, wenn die Eingabe über andere Methoden zu lesen, aber leider muß ich das ‚Abfangen‘ -Funktion von ReadKey nutzen.

Update:

Wenn ein Unicode-Zeichen, wie U + 03BB (λ) in die Konsole Einfügen 3 Schlüssel gelesen werden.

  1. Alt + Numpad1
  2. Alt + Numpad1
  3. Alt + NumPad8

Ich habe versucht zu sehen, ob dies eine Art der Codierung ist, kann aber nichts sehen.

War es hilfreich?

Lösung 3

Nun ist diese einfach seltsam. IIRC meiner Tests waren auf 32-Bit, wahrscheinlich Vista.

Nun das gleiche auf Win7 64-Bit getestet, das verdammte Ding funktioniert!

Also entweder ein Vista oder 32-Bit-Fehler.

Kann jemand bitte bestätigen das?

Andere Tipps

Leider Console.ReadKey ist nur in der Lage Tastaturereignisse zu verarbeiten. Tastaturereignisse können nur Dinge darstellen, die über die Tastatur eingegeben werden können (mit dem realen und „virtuellem“ Schlüssel in der ConsoleKey Aufzählung definiert). Also, wenn ReadKey findet sie hier nur zwei Dinge: ein rohen Schlüsselcode, der auf der Tastatur eine Taste entspricht, und der übersetzte Charakter, der das Unicode-Zeichen ist, dass der Roh-Schlüsselcode abbildet, die in der Eingangscodeseite der Konsole (und jeder Codepage kann maximal 256 Zeichen) abzubilden. Sie können nicht jede andere Art von Daten (nämlich Zeichen, die nicht direkt eingegeben werden können und / oder haben keine Zuordnung in der Eingangscodepage) lesen mit ReadKey.

Darüber hinaus, wenn Sie ein Unicode-Zeichen in die Konsole einfügen, verwendet die API von ReadKey versucht, den Charakter in eine Windows ALT + nnn Sequenz zu übersetzen (das heißt, halten ALT nach unten und den Code Punktnummer auf der Tastatur eingeben). Leider übersetzt sie den Charakter zuerst die Regeln unter Verwendung des Eingangscodepage definiert, so dass selbst wenn Sie den Code Punktnummer Rekonstitution werden Sie nicht den eigentlichen Charakter erhalten, die eingefügt wurde, erhalten Sie die Codepage bekommen, was Charakter es Karten zu.

Der Grund, alles funktioniert, wenn Lese oder Readline ist, dass dieser Strom-basierte, anstatt Tastatur-basierten Methoden. Offensichtlich jedes beliebige Zeichen kann über den Eingangsstrom kommen, da es keine Tastatur und Codepage-Übersetzung geschieht. Aber man kann nicht an dem Eingangsstrom erhält direkt ReadKey verwenden, nur die Tastatur (und wenn der Eingangsstrom wird von irgendwo anders umgeleitet worden ist als die Tastatur, wird ReadKey nicht völlig).

Es kann eine gewisse Art und Weise sein, das „Intercept“ Funktionalität von ReadKey unter Verwendung des Eingangsstroms zu replizieren, wenn Sie die Konsole manuell API mit P / Invoke verwenden, aber es wäre nicht trivial, und die Konsole nicht wirklich ist so konzipiert, das zu tun, Art der Sache, so werden Sie wahrscheinlich den ganzen Weg kämpfen.


Edit: Alles, was gesagt, Sie immer noch Ihre eigenen Tastenkombinationen implementieren konnten Unicode-Zeichen zu ermöglichen, über die Tastatur eingegeben werden - wie Typ STRG + ALT + U und dann vier hexadezimale Ziffern - Ihre ReadKey Routine könnten die Erkennung STRG + ALT + U und greifen dann die nächsten vier Tastenanschläge und einen int machen aus ihnen heraus und wandeln es in ein char - aber natürlich würde dies für das Einfügen nicht zulassen, dass

.

Das ConsoleKeyInfo Objekt zurückgegeben durch Console.ReadKey () hat eine Eigenschaft genannt KeyChar die Unicode Zeichen der gedrückten Taste oder eine Tastenkombination, die (wenn die Taste oder Tastenkombination ein Unicode äquivalent). So ...

char c = Console.ReadKey().KeyChar;

Sie erhalten eine ‚\ 0‘ char, wenn der Schlüssel nicht eine Unicode-Äquivalent haben (zum Beispiel eine Funktionstaste).

Sie können einen Stringbuilder verwenden, um diese Zeichen zusammen in einen Unicode-String verketten, falls erforderlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top