Wie Kyrillisch in C#?
Hallo,
ich möchte in C# ein Transliterationssystem programmieren.
Doch wenn ich Kyrillische Zeichen eingebe, erscheinen statt diesen nur Fragezeichen.
Wie genau löse ich das?
5 Antworten
Alles ist mit UTF-8 gespeichert...
Ok.. schau'n wir mal... ich arbeite auch nicht oft mit mit Kyrillischen Zeichen 🤔
Ich nehme den Kommentar mal als eigene Antwort hoch...
Sagen wir unserem Programm einfach, wie es mit den Zeichen vom Input umgehen soll und was ausgespuckt wird .
Console.InputEncoding = Encoding.Unicode;
Console.OutputEncoding = Encoding.Unicode;
...und schon klappts mit der Sprache der Nachbarn...
using System;
using System.Text;
namespace MyApplication
{
class Program
{
static void Main(string[] args)
{
//nur mal was nicht klappt
Console.WriteLine("current InputEncoding is: " + Console.InputEncoding);
Console.WriteLine("current outputputEncoding is: " + Console.OutputEncoding);
Console.WriteLine("testing:");
Console.WriteLine("Enter something kyrillic:");
string Test = Console.ReadLine();
Console.WriteLine("Input was : " + Test);
Console.WriteLine("now switching IN-Out to unicode 16LE");
//Codierung festlegen... Unicode16LE ist durch eine feste Zeichenbreite sehr stabil.
Console.InputEncoding = Encoding.Unicode;
Console.OutputEncoding = Encoding.Unicode;
Console.WriteLine("current InputEncoding is: " + Console.InputEncoding);
Console.WriteLine("current outputputEncoding is: " + Console.OutputEncoding);
Console.WriteLine("testing:");
Console.WriteLine("Enter something kyrillic:");
Test = Console.ReadLine();
Console.WriteLine("Input was : " + Test);
Console.ReadKey();
}
}
}
- https://docs.microsoft.com/en-us/dotnet/api/system.console.inputencoding?view=net-5.0
- https://docs.microsoft.com/en-us/dotnet/api/system.console.outputencoding?view=net-5.0
m ggf auch utf8 in eine Textdatei auszugeben kannst du dich an die Methoden von https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding?view=net-5.0 halten.
https://docs.microsoft.com/de-de/dotnet/api/system.text.encoding.convert?view=net-5.0

Danke! Es hat geklappt! Sorry dass ich so spät antworte!
Entweder Du hast deine Quelldatei als ANSI gespeichert oder im Programm eine Falsche Codepage gesetzt oder einen Font gewählt, welcher über keine Kyrill. Zeichen verfügt,gewählt.
Consolas Lucinda Console etc. können das aus dem Stand.
Ich weiß nicht was Du da treibst, aber wenn die .CS-Datei als UTF-8 Text (ohne BOM) gespeichert wurde, werden die Zeichen auch richtig ausgewertet. Standardmäßig nimmt der C#-Compiler an, die Quelldatei sei UTF-8
Offenbar willst du im Sourcecode kyrillische Zeichen haben.
Da gibt's die üblichen Möglichkeiten:
- Du speicherst deinen Sourcecode in einem entsprechenden Encoding. Heutzutage ist das üblicherweise UTF-8, womit sich sämtliche Unicode-Codepoints abbilden lassen. Dein Editor (z.B. Visual Studio) hat dafür Einstellungen.
- Du verwendest die dafür üblichen Escapezeichen (Backslash-u), dann geht das sogar in ASCII.
Was bedeutet "In c# ein Zeichen eingeben"?
In deinen Programmcode? Oder in das laufende Programm?
Willst Du Variablennamen auf Kyrillisch schreiben?
Oder nur kyrillische Strings ausgeben?
Und wo? In einer Textbox, oder auf der Console.
Wo entsteht das Problem? Beim Eingeben in die Entwicklungsumgebung oder bei der Ausgabe?
Ausgabe wohin? In einer Textbox, oder auf der Console.
Dir muss man die Würmer aber ordentlich aus der Nase ziehen.
Betriebssystem? Version von .Net?
Die Console ist sehr zickig in der Anzeige komischer Zeichensätze.
Du musst auf jeden Fall dafür sorgen UTF-8-Codierung bei der Ausgabe zu verwenden. Ich würde das ganze erstmal auf ne Form oder so versuchen auszugeben um zu sehen, ob es da klappt.
Versuche in der console (falls es Windows ist) davor mal den Befehl:
chcp 65001
Geht immer noch nicht. Ja ich verwende Windows.
Eine konkreten Rat kann ich dir so nicht gebe. Nur soviel, du müsstest dich mit dem Encoding von Zeichensätzen beschäftigen. Soweit ich weiß sind die kyrillischen Zeichen im UTF-8 Zeichensatz vorhanden
Als Startpunkt wäre das hier:
https://stackoverflow.com/questions/12013659/cyrillic-encoding-in-c-sharp
Halt dass es aus dem Programmcode ins Programm kommt