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;
}
这一切都有道理。非常感谢你,内科纳兹!