Domanda

I have an old database with some columns containing Cyrillic data, which is not readable and require conversion. As a trial I wrote following code but result is not what I expected. Can someone please point out the issue and/or advise how the data can be converted?

using System;
using System.Text;
using System.Windows.Forms;

namespace ConvertEncoding
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Encoding cp1251 = Encoding.GetEncoding("windows-1251");
        Encoding iso8859 = Encoding.GetEncoding("iso-8859-1");

        private void button1_Click(object sender, EventArgs e)
        {
            byte[] cp1251Bytes = cp1251.GetBytes("Ñîáëþäåíèå ïðàâ äåòåé â äåòñêèõ äîìàõ Êûðãûçñêîé Ðåñïóáëèêè");
            byte[] iso8859Bytes = Encoding.Convert(cp1251, iso8859, cp1251Bytes);
            string iso8859String = iso8859.GetString(iso8859Bytes);
            label1.Text = iso8859String;
            // Sample Cyrillic text should convert to: 
            // Соблюдение прав детей в детских домах Кыргызской Республики
        }
    }
}
È stato utile?

Soluzione

Its clear that "Ñîáëþäåíèå ïðàâ äåòåé â äåòñêèõ äîìàõ Êûðãûçñêîé Ðåñïóáëèêè" is iso-8859-1-encoded string. And you should convert it to windows-1251, but you are doing the opposite.

Just switch cp1251 and iso8859 everywhere inside button1_Click and you'll see correct result.

Maybe you want to use data as unicode, then convert it like this

Encoding utf8 = Encoding.GetEncoding("utf-8");
Encoding iso8859 = Encoding.GetEncoding("iso-8859-1");
Encoding cp1251 = Encoding.GetEncoding("windows-1251");

private void button1_Click(object sender, EventArgs e)
{
    byte[] bytes = iso8859.GetBytes("Ñîáëþäåíèå ïðàâ äåòåé â äåòñêèõ äîìàõ Êûðãûçñêîé Ðåñïóáëèêè"); // get bytes in source encoding
    // but they are actually cp1251 so...
    string utf8string = utf8.GetString(Encoding.Convert(cp1251, utf8, bytes)); // convert them from cp1251 to utf8
    label1.Text = utf8string;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top