Umlaute Windows + Oracle SQL
Verfasst: 14. März 2013 18:43
Hallo Leute!
Folgendes Problem:
Ich versuche über die Commandline unter WIndows Sonderzeichen korrekt auszugeben, aber habe keine Ahnung, was für ein Codec benötigt wird. Das Seltsame ist, dass die Datensätze aus der Oracle 11g xe Datenbank korrekt auf der Konsole dargestellt werden, aber wenn ich sie in eine Datei schreibe, sind die Umlaute im Ar***. Aus ö mach er mir z.B. Anführungszeichen 'Bj"rn' .
Mir fehlr jegliches Hintergrundwissen zu diesem anscheinend sehr komplexen Thema.
Angeblich sollen die Daten aus der Datenbank in "Windows-1252" kodiert geliefert werden, aber das ist irgendwie auch nicht richtig.
hier der Sourcecode:
Ich hatte auch schon versucht den Textstream diverse Codecs einzuflößen mit "setCodec()".
Ich brauche dringend Hilfe, ich weiß echt nicht mehr weiter bei diesem Codecquatsch...
Nachtrag:
Auch im QtCreator werden die Björns falsch ausgegeben in der Konsole und zwar wieder Anführungszeichen, statt öhs.
Folgendes Problem:
Ich versuche über die Commandline unter WIndows Sonderzeichen korrekt auszugeben, aber habe keine Ahnung, was für ein Codec benötigt wird. Das Seltsame ist, dass die Datensätze aus der Oracle 11g xe Datenbank korrekt auf der Konsole dargestellt werden, aber wenn ich sie in eine Datei schreibe, sind die Umlaute im Ar***. Aus ö mach er mir z.B. Anführungszeichen 'Bj"rn' .
Mir fehlr jegliches Hintergrundwissen zu diesem anscheinend sehr komplexen Thema.
Angeblich sollen die Daten aus der Datenbank in "Windows-1252" kodiert geliefert werden, aber das ist irgendwie auch nicht richtig.
hier der Sourcecode:
Code: Alles auswählen
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QStringList>
#include <QDebug>
#include <QSqlQuery>
#include <QSqlError>
#include <QTextCodec>
#include <stdlib.h>
#include <QFile>
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "aeiou áéíóúäü" << endl;
// putenv("NLS_LANG=AMERICAN_AMERICA.AL32UTF8");
QCoreApplication app(argc,argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1252"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1250"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1253"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1254"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1255"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1256"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1257"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1258"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ISO 8859-13"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ISO 8859-14"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ISO 8859-15"));
qDebug() << "aeiou áéíóúäü";
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ISO 8859-16"));
qDebug() << "aeiou áéíóúäü";
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setHostName("127.0.0.1");
db.setDatabaseName("db");
db.setUserName("user");
db.setPassword("1234");
qDebug() << "db.open()" << db.open();
QSqlQuery query;
db.transaction();
query.setForwardOnly(true);
query.prepare("SELECT WHERE VORNAME LIKE 'Bj%'");
db.commit();
qDebug() << "query.exec()" << query.exec();
QFile f("tata.sql");
f.open(QIODevice::WriteOnly|QIODevice::Text);
QTextStream s(&f);
qDebug() << s.codec()->name();
while(query.next())
{
QString insertString = QString(%1,%2,%3,%4,%5,%6,%7,%8,%9);")
.arg(query.value(0).toString())
.arg(query.value(1).toString())
.arg(query.value(2).toString())
.arg(query.value(3).toString())
.arg(query.value(4).toString())
.arg(query.value(5).toString())
.arg(query.value(6).toString())
.arg(query.value(7).toString())
.arg(query.value(8).toString())
;
s << insertString << endl;
qDebug() << "write patient with id: " << query.value(0).toByteArray() << query.value(1).toByteArray();
}
f.close();
return 0;
}
Code: Alles auswählen
aeiou ├í├®├¡├│├║├ñ├╝5D95D800aeiou ßÚݾ·õ³
aeiou ├í├®├¡├│├║├ñ├╝
aeiou ├í├®├¡├│├║├ñ├╝
aeiou A?A®A¡AlAsAñAL
aeiou G?G®G¡G│G?GñG?
aeiou ├í├®├¡├│├║├ñ├╝
aeiou ?í?®?¡?│?¸???╝
aeiou ???®?¡?│???ñ?╝
aeiou C?C®C¡C│CrCñC╝
aeiou AíA®A¡A│A║AñA╝
aeiou CöC®C¡C│CrCñC╝
aeiou ├?├®├¡├g├?├C├?
aeiou ├í├®├¡├│├║├Ç├î
aeiou AAA®A¡AlA?AÇAî
db.open() true
query.exec() true
"System"
write patient with id: "61" "Björn"
write patient with id: "4137" "Björn"
write patient with id: "4954" "Björn"
write patient with id: "5215" "Björn"
write patient with id: "7344" "Björn"
write patient with id: "10150" "Björn Stephan"
write patient with id: "7674" "Björn"
write patient with id: "10858" "Bjoern"
write patient with id: "10558" "Björn"
write patient with id: "14166" "Björn"
write patient with id: "16173" "Bjanka"
write patient with id: "16921" "Björn"
write patient with id: "16320" "Björn"
write patient with id: "16015" "Björn"
write patient with id: "18306" "Bjoern"
write patient with id: "19675" "Björn"
write patient with id: "19124" "Björn-Wolfgang"
write patient with id: "22155" "Björn"
write patient with id: "22744" "Björn"
write patient with id: "20982" "Bjoern"
write patient with id: "23094" "Björn"
write patient with id: "25271" "Björn"
write patient with id: "24067" "Bjoern Soenke"
write patient with id: "24303" "Björn"
write patient with id: "24996" "Björn"
write patient with id: "25623" "Bjoern"
write patient with id: "27255" "Bjoern"
write patient with id: "27082" "Björn"
write patient with id: "29443" "Björn"
write patient with id: "28804" "Björn"
write patient with id: "29649" "Björn"
write patient with id: "29694" "Björn"
Betõtigen Sie die <RETURN> Taste, um das Fenster zu schlie▀en... Ich brauche dringend Hilfe, ich weiß echt nicht mehr weiter bei diesem Codecquatsch...
Nachtrag:
Auch im QtCreator werden die Björns falsch ausgegeben in der Konsole und zwar wieder Anführungszeichen, statt öhs.