c#-unicode


#1
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!
 
#2
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();
}
 
#4
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.
 
#5
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.
 

Neue Beiträge