Проблемы кодировки символов .NET - PullRequest
0 голосов
/ 02 ноября 2009

У меня есть некоторые проблемы на сайте .NET, где латинские (ääö) и латышские (ēē) символы должны сосуществовать. В базе данных я использую nvarchar и ntext для своих полей, и если я ввожу тексты непосредственно в базу данных, все работает нормально.

Проблема заключается в том, что когда я ввожу тот же самый текст, используя форму, которая выполняет SQL UPDATE, латышские символы преобразуются в аналогичные латинские символы, поэтому строка "åäöāē" будет сохранена как "åäöae".

Я немного пробовал с другим CodePages, но пока не получаю желаемых результатов. У кого-нибудь есть предложения?

Ответы [ 3 ]

4 голосов
/ 02 ноября 2009

Передает ли ваш оператор SQL значение в БД в виде значения Юникода?

например. базовый пример

INSERT YourTable VALUES ('Unicode Value')

должно быть:

INSERT YourTable VALUES (N'Unicode Value')

Очевидно, я бы порекомендовал вам использовать параметризованный SQL / хранимую процедуру и определить параметр как NVARCHAR, но вы получите то, что я говорю.

1 голос
/ 02 ноября 2009

Выясните, что происходит, взяв каждый участок конвейера отдельно.

См. Мою статью о отладке проблем с юникодом и диагностируйте, где что-то идет не так. Места, где у вас могут возникнуть проблемы:

  • Получение данных от пользователя
  • Обновление базы данных
  • Извлечение из базы данных
  • Отображение выбранных вами данных

Проверяйте каждый из этих независимо , никогда не полагаясь на какой-либо конкретный шрифт и т. Д. Распечатайте соответствующие кодовые точки Unicode (согласно статье).

О, и где бы вы ни указали это, используйте кодировку, которая может кодировать все - я бы предложил UTF-8.

0 голосов
/ 02 ноября 2009

Приложения для Windows Forms

При вводе текста в текстовое поле Windows Form необходимо использовать шрифт Unicode, например Arial Unicode MS.

Веб-страница

Убедитесь, что вы используете UTF-8 в качестве кодовой страницы ответа. Отличная статья от Microsoft именно об этом http://support.microsoft.com/kb/893663

UTF-8 будет правильно кодировать любые символы. Помните, что NText и NVarChar в вашей БД являются типами данных UTF-16, поэтому просмотр данных в Query Analyzer может показать их правильно.

В вашем SQL

Если вы создаете SQL динамически, убедитесь, что вы используете префикс N, например

INSERT INTO TABLE (Name, Number) VALUES (N'MyName', 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...