Кодировка кириллицы в 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
---------------------------