Проблема с кодировкой акцентированных символов между клиентом и сервером оракула - PullRequest
0 голосов
/ 25 марта 2019

У меня есть база данных оракула, которой NLS_CHARACTERSET является AL32UTF8.У меня есть приложение (ASP.NET C #) на клиенте, для которого NLS_LANG - FRENCH_FRANCE.WE8MSWIN1252.

Акцентированные символы хорошо отображаются в приложении.Однако, когда в предложении WHERE есть акцентированный символ, oracle не находит данные, хотя они там есть.

Я обнаружил, что «é» было записано в базе данных как «c3a9».Это делается на сервере (SqlDeveloper), поэтому работает нормально, потому что пока нет преобразования между наборами символов.accented characters preview

Однако в моем приложении на клиенте SQL-запрос с предложением WHERE, который содержит символ с акцентом, не работает.Например, у меня есть этот запрос:

string request = "UPDATE fonction SET libelle = '" + new_libelle.Replace("'", "''") + "' WHERE libelle = '" + old_libelle.Replace("'", "''") + "'";

Если в old_libelle есть акцентированный символ, oracle не находит данные и поэтому обновление не выполняется.

Я не могу изменитьNLS_CHARACTERSET базы данных, потому что она используется многими другими приложениями, и я не хочу, чтобы побочные эффекты появлялись.

Как это исправить?

1 Ответ

0 голосов
/ 25 марта 2019

Проверьте настройки кодирования в вашей веб-среде, например, Response.ContentEncoding и / или Response.Charset

Если вы установите NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252, то вы должны установить эти значения Encoding.WindowsCodePage (в вашем случае это CP-1252)

В противном случае, если вы предпочитаете Юникод (скорее всего, UTF-8), тогда установите NLS_LANG соответственно на FRENCH_FRANCE.AL32UTF8

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