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