#include <cstdio>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
#include <array>
std::string exec(const char* cmd) {
std::array<char, 128> buffer;
std::string result;
std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
if (!pipe) {
throw std::runtime_error("popen() failed!");
}
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
result += buffer.data();
}
return result;
}
предC++ 11 версий:
#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>
std::string exec(const char* cmd) {
char buffer[128];
std::string result = "";
FILE* pipe = popen(cmd, "r");
if (!pipe) throw std::runtime_error("popen() failed!");
try {
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
result += buffer;
}
} catch (...) {
pclose(pipe);
throw;
}
pclose(pipe);
return result;
}
Замена popen
и pclose
с _popen
и _pclose
для Windows.
The NLS_LANG settings are derived from the java.util.Locale . Therefore, you will need to make a call similar to this before connecting:
Locale.setDefault(Locale.<your locale here>);
Я боролся с той же проблемой и обнаружил, что тонкие jdbc драйверы Oracle не требуют указания NLS_LANG или системной локали. Но когда вы подключаетесь к неанглийским базам данных, вы должны иметь orai18n.jar в classpath.
из Oracle® Database JDBC Developer's Guide and Reference
Обеспечение поддержки глобализации
Основные файлы Java Archive (JAR), ojdbc5.jar и ojdbc6.jar, содержат все необходимые классы для обеспечения полной поддержки глобализации для:
- Наборы символов Oracle для CHAR, VARCHAR, LONGVARCHAR или CLOB данных которые не извлекаются или не вставляются в качестве члена данных объекта Oracle объекта или типа коллекции.
- CHAR или VARCHAR члены данных объекта и коллекции для наборов символов US7ASCII, WE8DEC, WE8ISO8859P1, WE8MSWIN1252, и UTF8.
Для использования любых других наборов символов в CHAR или VARCHAR в членах данных объектов или коллекций, вы должны включить файл orai18n.jar в CLASSPATH переменную окружения вашего приложения.