Устаревший код proc C / C ++ с символом сечения (§)

Я поддерживаю наследство oracle proc C/C++ код, который обработка текстового файла и обновление БД. В коде они готовят SELECT утверждение, которое выглядит примерно так

SELECT 'ERROR_ID=§' || ERROR_ID ||  '§'  || ' AND ' ...

и после выполнения оператора select они получают данные, как показано ниже в массиве char.

ERROR_ID=§ASI:10§ AND

позже они заменяют символ сечения (§) одинарными кавычками, как показано ниже

if((char)file_str.arr[k]=='§')
{
strncpy((char*)&file_str.arr[k],"'",1);
}

В основном они получают первичные ключи из БД (старый первичный ключ) и сравнивают первичный ключ, который присутствует в текстовом файле (новые ключи).
Они используют простые strcmp сравнить эти первичные ключи.

Теперь у меня проблема. Несмотря на то, что старые и новые первичные ключи совпадают, если посмотреть на файл журнала, эти вопросительные знаки появляются вместо одинарных кавычек.

ERROR_ID=?ASI:10? AND FORM_ID=?064956?  - old key
ERROR_ID='ASI:10' AND FORM_ID='064956'  - new key

Я предполагаю, что, поскольку они используют sectional symbol(§) в коде, который является non ASCII charСбой.

Пожалуйста, предложите.

Обновить:
Один и тот же двоичный файл развернут в разных средах. В некоторых средах символ сечения (§) заменяется на «?» оценки, а на некоторых все работает нормально.
Вопрос:
Есть ли какие-либо параметры среды, которые влияют на это? Если да, то что я должен искать.

ОС на всех средах это: SunOS 5.10

0

Решение

Ваш исполняемый файл, вероятно, не устанавливает никакой локали. Таким образом, ваша программа работает с локалью, установленной средой. Я предлагаю установить локаль из вашего кода, например: setlocale (LC_ALL, «C»);
прежде чем что-либо еще работает.

0

Другие решения

Я думаю, что подход неверен. я думаю тебе надо

  1. Прочитайте текстовый файл, переведя на wchar_t, чтобы убедиться, что у вас есть правильная локаль для текстового файла. Будь то набор символов фиксированной ширины (кодовые страницы в байтах, UCS-2), набор многобайтовых символов (UTF-8, другие), вы получите набор символов фиксированной ширины в wchar_t.
  2. Создайте SQL как строку. Теперь «§» должен корректироваться независимо от входного файла.
  3. Выполните SQL.
0

По вопросам рекламы [email protected]