Encoding 将西里尔文数据从Windows-1251解码为ISO-8859-1

Encoding 将西里尔文数据从Windows-1251解码为ISO-8859-1,encoding,cyrillic,Encoding,Cyrillic,我有一个旧数据库,其中有些列包含西里尔文数据,不可读,需要转换。作为试用,我编写了以下代码,但结果并不是我所期望的。有人能指出问题和/或建议如何转换数据吗 using System; using System.Text; using System.Windows.Forms; namespace ConvertEncoding { public partial class Form1 : Form { public Form1() {

我有一个旧数据库,其中有些列包含西里尔文数据,不可读,需要转换。作为试用,我编写了以下代码,但结果并不是我所期望的。有人能指出问题和/或建议如何转换数据吗

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: 
            // Соблюдение прав детей в детских домах Кыргызской Республики
        }
    }
}
很明显,þþþåååååååååååååååååååååòõîîìðåîîåååþþ254。你应该把它转换成windows-1251,但你做的恰恰相反

只要将cp1251和iso8859切换到按钮1内的所有位置,然后单击,您将看到正确的结果

也许您想将数据用作unicode,然后像这样进行转换

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;
}

这一切都有道理。非常感谢你,内科纳兹!