Unicode String Problem

12/07/2014 21:30 MrCrackR#1
Hallo, ich schreibe momentan an einem RSS-Reader, der die Feeds filtert und auf einem SQL-Server speichert.
Später will ich die dann über ein Webinterface durchsuchen können. In Autoit hätte ich das ganze wahrscheinlich
in kürzester Zeit programmiert, aber ich will das ganze später auf meinem Raspberry Pi (ARM-Prozessor, Linux)
laufen lassen, deshalb musste ich C++ nehmen. Den Netzwerkteil ([Only registered and activated users can see links. Click Here To Register...]) und den Regexteil (BOOST) habe ich schon erledigt.
Bei dem ersten Test habe ich bemerkt, das Zeichen außerhalb des ASCII-Bereiches (0x20 - 0x7e) nicht richtig dargestellt werden.
Meine erste Vermutung war, dass es an der Konsole liegen muss, das z. B. Ä, Ö, Ü nicht richtig ausgegeben werden
(das Problem hatte ich vor ein paar Jahren schon einmal).
Also habe ich mir einfach mal den String in die Zwischenablage kopieren lassen mit
Code:
bool setClipBoardString(string source) {
	if(OpenClipboard(NULL)) {
		HGLOBAL clipbuffer;
		char * buffer;
		EmptyClipboard();
		clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.size()+1);
		buffer = (char*)GlobalLock(clipbuffer);
		strcpy(buffer, LPCSTR(source.c_str()));
		GlobalUnlock(clipbuffer);
		SetClipboardData(CF_TEXT,clipbuffer);
		CloseClipboard();
		return true;
	}
	return false;
}
Resultat: selbes Problem!

Das habe ich schon alles ausprobiert:
  • Clipboard statt Konsole
  • Unicode einstellen als Zeichensatz in den Projekteinstellungen
  • wcout statt cout
  • neues leeres Projekt anlegen und Code weiter unten ausprobieren
  • main.cpp in Unicode speichern
Code:
#include <iostream>
#include <string>

using namespace std;

void main() {
	wstring test;
	cout << "ÄÖÜäöü" << endl;
	wcout << "ÄÖÜäöü" << endl;
	wcin >> test;
}
Verwendete IDE: Visual Studio 2013
Verwendetes Platformtoolset: Visual Studio 2012 ([Only registered and activated users can see links. Click Here To Register...])

Ich hoffe, es gibt eine einfache Lösung, bei der es dann später auch keine Probleme mit GCC gibt.
12/09/2014 00:43 MrCrackR#2
Ok ich habe gerade bemerkt, dass folgender Code in einem neuen Projekt funktioniert (String im Clipboard):
Code:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;

string test = "ÄÖÜäöü";

bool setClipBoardString(string source) {
	if (OpenClipboard(NULL)) {
		HGLOBAL clipbuffer;
		char * buffer;
		EmptyClipboard();
		clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.size() + 1);
		buffer = (char*)GlobalLock(clipbuffer);
		strcpy(buffer, LPCSTR(source.c_str()));
		GlobalUnlock(clipbuffer);
		SetClipboardData(CF_TEXT, clipbuffer);
		CloseClipboard();
		return true;
	}
	return false;
}

void main() {
	cout << test << endl;
	setClipBoardString(test);
	cin >> test;
}
Die Ausgabe in die Konsole funktioniert zwar immer noch nicht richtig, aber das war ja auch nicht mein Ziel. Ich wollte ja nur den String von der Netzwerkfunktion fehlerfrei an die Regex- und schließlich an die SQL-Funktion weitergeben.
Da habe ich wohl irgendwo in den Projekteinstellungen Schindluder getrieben.
Ich fange mit dem Projekt an besten noch einmal von vorne an.

Thread kann geschlossen werden :D
12/09/2014 01:18 snow#3
#closed (on request)