c#-unicode


adilosch

Grünschnabel
Hallo,
Ich bin ganz neu bei c#,

Ich versuche ein Textdatei kontrolieren ob, unicode ist, falls nicht als Unicode zu speichern!

Kann jemand mir helfen?

Ich freue mich sehr!
 

Niro99

Mitglied
Hallo adilosch!

Nicht dass ich dir den ganzen Lerneffekt wegnehmen möchte, aber dein Problem mit den Codierungen hat mich auch gerade interessiert.

Anbei der Code (sollte laufen):
Code:
private void button1_Click(object sender, System.EventArgs e)
{
	// Textdatei öffnen
	OpenFileDialog ofd = new OpenFileDialog();
	ofd.Title = "Textdatei wählen...";
	ofd.Filter = "Textdatei (*.txt)|*.txt";						
	ofd.FilterIndex = 1;
	if( ofd.ShowDialog() != DialogResult.OK )	
		return;	

	// Aktuelle Codierung bestimmen
	StreamReader reader = File.OpenText(ofd.FileName);
	if (reader.CurrentEncoding == System.Text.Encoding.Unicode)
		return;
		
	ArrayList al = new ArrayList();
	string s;
					
	while ((s = reader.ReadLine()) != null)
	{
		al.Add(s);
	}
	reader.Close();

	// Stream mit der zu verwendenden Codierung definieren
	FileStream fs = File.OpenWrite(ofd.FileName);
	StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.Unicode);
	foreach (string t in al)
	{
		writer.WriteLine(t);
	}
	writer.Close();
}
 

adilosch

Grünschnabel
Danke Niro,

Das hat mir sehr geholfen.Ich habe meine Fehler gut korrigiert.Das war genau was ich wollte.

Ich bedanke mich sehr!
 

h1tm4n

Grünschnabel
Hallo. Ich wollte keinen neuen Thread öffnen, da mein Problem ähnlich ist.

Problem: Ich will eine Unicode (UTF-16) Datei erstellen aber die Datei ist immer ASCII. Sprich ich kann sie mit notepad öffnen und sehe einen stinknormalen Text.

Code:

Code:
	StreamWriter sw = new StreamWriter("./tagopen.txt", false, System.Text.Encoding.GetEncoding("utf-16"));
	sw.Write("<" + args[0] + ">");
	sw.Close();
Wenn ich das Programm mit "tagwriter.exe test" ausführe, dann steht in der Datei "<test>" (ohne Apostrophe). Eigentlich müsste aber jedes Zeichen durch 2 Bytes dargestellt werden (da ja UTF-16 und nicht UTF-8).

Muss ich irgendwas nachinstallieren, damit das geht? Kann ich mir fast nicht vorstellen.
 

h1tm4n

Grünschnabel
Ich habe jetzt folgendes erfolgreich probiert:

Code:
// String in eine Byte-Array umwandeln
byte[] baASCIIArgs0 = Encoding.ASCII.GetBytes(args[0]);
byte[] baUTF16Args0 = Encoding.Convert(Encoding.ASCII, Encoding.Unicode, baASCIIArgs0);
// Erstelle UTF-16 Datei
FileStream fs = File.Create("./tagopen.txt");
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(baUTF16Args0);
bw.Close();
fs.Close();
Notepad zeigt zwar noch immer nur "test" an, aber wordpad zeigt alle 8 Bytes an.