Moduler>GUI-komponenter>Tekstformat
Tekstformat
Koding av tekst kan skape mye hodebry dersom vi skal forholde oss til materiale som i utgangspunktet er kodet på forskjellig måte. Kanskje vi henter noe fra en nettressurs eller kanskje vi har laget noe i en editor som ikke har lagret akkurat som vi har tenkt. Wikipedia's oversikt [1] kan være et sted å starte for en enkel innføring.
Det er fire hovedfunksjoner som er beskrevet:
- opplasting av en tekst fra en ressurs i programmet
- lasting av en tekst fra fil, med eller uten encoding
- konvertering av en tekst
- lagring av en tekst, med eller uten encoding
For å kunne bruke dette programmet til noe nyttig bør du sette opp en editor for å undersøke/initirere de data programmet jobber mot, og du må endre i kode. Encodingen er som du ser nedenfor hardkodet.
Lasting av ressurs
private void buttonInit_Click(object sender, EventArgs e) { textBox1.Text = Properties.Resources.LittText; }
Lasting av fil
private void buttonLoad_Click(object sender, EventArgs e) { openFileDialog1.Filter = "txt files (*.txt)|*.txt"; openFileDialog1.InitialDirectory = @"c:\temp"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { string filename = openFileDialog1.FileName; FileStream fs = new FileStream(filename, FileMode.Open); StreamReader sr; if (sender.Equals(buttonLoad)) { //without encoding sr = new StreamReader(fs); } else { // with encoding: iso-8859-1 sr = new StreamReader(fs, Encoding.GetEncoding("iso-8859-1")); } textBox1.Text=sr.ReadToEnd(); sr.Close(); } }
Konvertering
private string setEncoding(string originalS, string oldEnc,string newEnc) { // Create encodings. Encoding oldE = Encoding.GetEncoding(oldEnc); Encoding newE = Encoding.GetEncoding(newEnc); // Need to handle the string as a byte[]. byte[] originalBytes = oldE.GetBytes(originalS); // convert. byte[] newBytes = Encoding.Convert(oldE, newE, originalBytes); // Convert the new byte[] into a char[] and then into a string. char[] newChars = new char[newE.GetCharCount(newBytes, 0, newBytes.Length)]; newE.GetChars(newBytes, 0, newBytes.Length, newChars, 0); string newString = new string(newChars); return newString; } private void buttonConvert_Click(object sender, EventArgs e) { textBox1.Text = setEncoding(textBox1.Text, "iso-8859-1", "utf-8"); }
Lagring
private void buttonSave_Click(object sender, EventArgs e) { if (textBox1.TextLength == 0) return; saveFileDialog1.Filter = "txt files (*.txt)|*.txt"; saveFileDialog1.InitialDirectory = @"c:\temp"; if (saveFileDialog1.ShowDialog(this) == DialogResult.OK) { string filename = saveFileDialog1.FileName; FileStream fs = new FileStream(filename, FileMode.Create); StreamWriter sw; if (sender.Equals(buttonSave)) { // without encoding sw = new StreamWriter(fs); } else { // with encoding: iso-8859-1 sw = new StreamWriter(fs,Encoding.GetEncoding("iso-8859-1")); } sw.Write(textBox1.Text); sw.Close(); } }