Кодировка кириллицы в C#

У меня есть куча кириллического текста в базе данных MSSQL и нужно преобразовать его в кириллицу в C#.

Так... Ðàáîòà â ãåðìàíèè

должны стать

Работа в германии

какие предложения?

Я должен добавить ,что ближе всего я получил?aaioa aa?iaiee

вот код, который я использую:

 str = Encoding.UTF8.GetString(Encoding.GetEncoding("Windows-1251").GetBytes(drCurrent["myfield"].ToString()));
 str = Encoding.GetEncoding(1251).GetString(Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding(1251), Encoding.UTF8.GetBytes(str)));

2 ответов


// To find out source and target
const string source = "Ðàáîòà â ãåðìàíèè";
const string destination = "Работа в германии";

foreach (var sourceEncoding in Encoding.GetEncodings())
{

    var bytes = sourceEncoding.GetEncoding().GetBytes(source);
    foreach (var targetEncoding in Encoding.GetEncodings())
    {
        if (targetEncoding.GetEncoding().GetString(bytes) == destination)
        {
            Console.WriteLine("Source Encoding: {0} TargetEncoding: {1}",sourceEncoding.CodePage,targetEncoding.CodePage);
        }

    }
}

// Result1: Source Encoding: 1252 TargetEncoding: 1251
// Result2: Source Encoding: 28591 TargetEncoding: 1251
// Result3: Source Encoding: 28605 TargetEncoding: 1251

// The code for you to use 
var decodedCyrillic = Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1252).GetBytes(source));
// Result: Работа в германии

ADO.Net предоставляет все строковые типы из поставщика SQL Server в виде строк C#, что означает, что они уже были преобразованы в Unicode. Для исходных столбцов, отличных от unicode (как ваш, очевидно, есть), как char(n) или varchar(n), ADO.Net поставщик SQL Server использует источник сортировка информация для определения кодировки. Поэтому, если ваш Юникод данных SQL Server получает представлены в .Чистая с неверной кодировке, она должна были представлены поставщику неправильная сортировка. Выберите соответствующие параметры сортировки данных и ADO.Net поставщик SQL Server переведет его с помощью соответствующей кодировки. Например, как описано в параметры сортировки и архитектура кодовой страницы, кириллические сортировки приведут к кодовая страница 1251, что очень вероятно, что вы хотите. Связанные статьи содержат всю информацию, необходимую для устранения проблемы.

using System;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;

public class Hello1
{
   public static void Main()
   {
    try
    {
        using (SqlConnection conn = new SqlConnection("server=.;integrated security=true"))
        {
            conn.Open ();

            // The .cs file must be saved as Unicode, obviously...
            //
            string s = "Работа в германии"; 

            byte[] b = Encoding.GetEncoding(1251).GetBytes (s);

            // Create a test table
            //
            SqlCommand cmd = new SqlCommand (
                @"create table #t (
                    c1 varchar(100) collate Latin1_General_CI_AS, 
                    c2 varchar(100) collate Cyrillic_General_CI_AS)", 
                conn);
            cmd.ExecuteNonQuery ();

            // Insert the same value twice, the original Unicode string
            // encoded as CP1251
            //
            cmd = new SqlCommand (
                @"insert into #t (c1, c2) values (@b, @b)", conn);
            cmd.Parameters.AddWithValue("@b", b);
            cmd.ExecuteNonQuery ();

            // Read the value as Latin collation 
            //
            cmd = new SqlCommand (
                @"select c1 from #t", conn);
            string def = (string) cmd.ExecuteScalar ();

            // Read the same value as Cyrillic collation
            //
            cmd = new SqlCommand (
                @"select c2 from #t", conn);
            string cyr = (string) cmd.ExecuteScalar ();

            // Cannot use Console.Write since the console is not Unicode
            //
            MessageBox.Show(String.Format(
                @"Original: {0}  Default collation: {1} Cyrillic collation: {2}", 
                    s, def, cyr));
        }

    }
    catch(Exception e)
    {
        Console.WriteLine (e);
    }   
   }
}

результат:

---------------------------

---------------------------
Original: Работа в германии  Default collation: Ðàáîòà â ãåðìàíèè Cyrillic collation: Работа в германии
---------------------------
OK   
---------------------------