Возникли проблемы с хранением UTF-8 в NVarChar в SQL Server 2008 - PullRequest
0 голосов
/ 20 апреля 2011

Я извлекаю данные с помощью System.Net.WebClient с веб-сайта, и когда данные возвращаются, все анализируется и выглядит хорошо, кроме букв с акцентами. Например, когда он возвращает é, SQL Server 2008 сохраняет его как é.

Просто нужно выяснить, как преобразовать эти символы UTF-8 во что-то, что SQL Server может читать. Я храню его в NVARCHAR(MAX) типе данных.

Я использую Linq-to-SQL для вставки в базу данных, если вам интересно.

Есть мысли о том, что я мог бы сделать, чтобы преобразовать его в правильный формат?

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

Разобрался!При использовании класса WebClient я загружал данные в виде строки.

Моя исходная конфигурация ...

System.Net.WebClient wc = new WebClient();
string htmlData = wc.DownloadString(myUri);

Я пытался преобразовать эти данные в UTF-16 ...из текущей строки, но поскольку Microsoft работает в UTF-16, она сама обработала преобразование.

Вместо этого я переключил свой подход на чтение фактического массива byte [] из данных следующим образом:.

System.Net.WebClient wc = new WebClient();
string htmlData = UTFConvert(wc.DownloadData(myUri));

private string UTFConvert(byte[] utfBytes)
{
    byte[] isoBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utfBytes);
    return Encoding.Unicode.GetString(isoBytes);
}

Это решило проблему, и теперь SQL правильно видит акценты во всем.Йиппи.

Приветствую всех и спасибо за вашу помощь!

3 голосов
/ 20 апреля 2011

Описание хранения данных UTF-8 в SQL Server . Также обсуждается эта тема на Международные функции в Microsoft SQL Server 2005 . Суть этого такова: SQL Server не поддерживает UTF-8. Не стесняйтесь отправить запрос на Добавить поддержку для хранения UTF-8 в SQL Server .

Тем не менее, поскольку вы сохраняете строку Unicode через LINQ, это указывает на то, что проблема возникает за до записи в SQL Server. А именно, тянет ли ваш веб-сайт, правильно ли он конвертирует данные, считанные с помощью считывателя UTF-8? А именно, читаете ли вы WebResponse.GetResponseStream() через StreamReader, построенный с соответствующими UTF8Encoding? Что должно создать правильную строку Unicode, и тогда хранилище NVARCHAR в БД (которое является UCS-2) должно быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...