2014-03-12 3 views
1

키릴 문자 데이터가 포함 된 일부 열이있는 이전 데이터베이스가 있습니다.이 열은 읽을 수없고 변환이 필요합니다. 예심으로 나는 뒤에 오는 부호를 썼다 그러나 결과는 나가 예상 한 무슨이 아니다. 누군가가 문제를 지적하고/또는 데이터가 어떻게 변환 될 수 있는지 조언 해 주실 수 있습니까?키릴 문자 데이터를 Windows-1251에서 ISO-8859-1로 디코딩

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: 
      // Соблюдение прав детей в детских домах Кыргызской Республики 
     } 
    } 
} 

답변

0

"Ñîáëþäåíèå ïðàâ äåòåé â äåòñêèõ äîìàõ Êûðãûçñêîé Ðåñïóáëèêè"ISO-8859-1 인코딩 된 문자열이 분명히있다. 그리고 이것을 windows-1251으로 변환해야하지만 그 반대입니다.

button1_Click 안에 cp1251iso8859 스위치 만 있으면 정확한 결과를 볼 수 있습니다.

은 아마 당신은 다음, 유니 코드로 데이터를 사용 그것은 모두 의미가이

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

처럼 변환 할. NekoNaz 정말 고마워! – kannas