Encoding
Børre Stenseth
Moduler>GUI-komponenter>Tekstformat

Tekstformat

Hva
screen
Koding av tekst

Dette er en eksperimentell modul. Du kan bruke det prosjektet som beskrives som et enkelt laboratorium for å eksperimentere med koding av tekst.

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();
    }
}
Referanser
  1. Character encodingWikipedia2009Wikipediaen.wikipedia.org/wiki/Character_encoding14-03-2010
  • Prosjekt:
    https://svn.hiof.no/svn/psource/Csharpspikes/text
Vedlikehold

B. Stenseth, januar 2008

(Velkommen) Moduler>GUI-komponenter>Tekstformat (Databinding)