Я вытаскиваю некоторый интернационализированный текст из базы данных MS SQL Server 2005.Согласно значениям по умолчанию для этой БД символы сохраняются как UCS-2.Однако мне нужно вывести данные в формате UTF-8, так как я отправляю их через Интернет.В настоящее время у меня есть следующий код для преобразования:
SqlString dbString = resultReader.GetSqlString(0);
byte[] dbBytes = dbString.GetUnicodeBytes();
byte[] utf8Bytes = System.Text.Encoding.Convert(System.Text.Encoding.Unicode,
System.Text.Encoding.UTF8, dbBytes);
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
string outputString = encoder.GetString(utf8Bytes);
Однако, когда я проверяю вывод в браузере, он выглядит как мусор, независимо от того, какую кодировку я установил.
Что мне не хватает?
РЕДАКТИРОВАТЬ: В ответ на ответы ниже, я подумал, что мне пришлось выполнить преобразование, потому что я могу вывести буквально многобайтовые строки очень хорошо.Например:
OutputControl.Text = "カルフォルニア工科大学とチューリッヒ工科大学は共同で、太陽光を保管可能な燃料に直接変えることのできる装置の開発に成功したとのこと";
работает.Здесь OutputControl
является литералом ASP.Net.Однако
OutputControl.Text = outputString; //Output from above snippet
приводит к искаженному выводу, как описано выше.Моя гипотеза состояла в том, что ASP.Net вывод базы данных каким-то образом искажается.Если это не так, то каковы другие возможности?
РЕДАКТИРОВАТЬ 2: Хорошо, я тупой.Оказывается, с базой данных все в порядке.Когда я попытался вставить свои собственные буквенные двухбайтовые символы (材料,原料;木料
), я мог читать и выводить их очень хорошо, даже без какого-либо процесса преобразования вообще.Мне кажется, что то, что вставляет данные в БД, каким-то образом искажает символы, так что я собираюсь посмотреть на это.С моими проверенными «чистыми» данными работает следующий код:
OutputControl.Text = dbString.ToString();
, как показывают ответы ниже.