Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: MFC (Visual C++) ::  Unicode UTF-16LE  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Jakob Hofmann
Unregistrierter




Beitrag Jakob Hofmann Unregistrierter 11:18:23 01.09.2010   Titel:   Unicode UTF-16LE            Zitieren

Hi,

in meinen Projekteinstellungen VS verwende ich Unicode; Jetzt möchte ich gern einen Cstring, welcher einen Response Header für das Http Protokoll beinhaltet, per Socket rausschicken an den Web-Browser.

Schau ich mir den Stream an, welcher anschließend über den Socket rausgeschickt wird (mit Wireshark), ist dieser UTF-16LE kodiert. Wird anscheinend per Default bei der Unicode-Einstellung verwendet. Das Problem jetzt ist, dass der Web-Browser (wie Firefox) mir die Homepage nicht anzeigt,

Code:
//ausgabestream in bytes
0x48 0x00 0x54 0x00 0x54 0x00 0x50 0x00 0x2F 0x00
Code:
//ausgabestream in bytes
0x48 0x00 0x54 0x00 0x54 0x00 0x50 0x00 0x2F 0x00
Code:
//ausgabestream in bytes
0x48 0x00 0x54 0x00 0x54 0x00 0x50 0x00 0x2F 0x00


weil der Browser anscheinend UTF-16LE nicht versteht. Ich übertrage einen entsprechenden Content-Type Header mit der Information text/html; charset=UTF-16LE - aber das zeigt keinerlei Wirkung. Hab auch schon probiert diese Information im Html-File unterzubringen - auch keine Wirkung.

Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-16le"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Beschreibung der Seite</title>
</head>
<body>

</body>
</html>
Code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-16le"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Beschreibung der Seite</title>
</head>
<body>

</body>
</html>
Code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-16le"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Beschreibung der Seite</title>
</head>
<body>

</body>
</html>


Verwende ich als Einstellung im VS nicht unicode sondern multibyte code, dann funktioniert alles einwandfrei, da jedes Byte dann "eine neue Information" beinhaltet. Allerdings soll die Page auch in Russisch dargstellt werden können, und somit reichen mir 8bit zur Darstellung nicht aus.

Gruß
Jakob
SG1!@home
Unregistrierter




Beitrag SG1!@home Unregistrierter 13:24:37 01.09.2010   Titel:   Re: Unicode UTF-16LE            Zitieren

Jakob Hofmann schrieb:
Ich übertrage einen entsprechenden Content-Type Header mit der Information text/html; charset=UTF-16LE - aber das zeigt keinerlei Wirkung.


Wie sind denn Deine Header codiert? Wenn die auch schon UTF16 sind, wundert's mich nicht. Versuch mal, die in US-ASCII zu versenden.
Calando
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.09.2010
Beiträge: 2
Beitrag Calando Mitglied 12:33:09 02.09.2010   Titel:   Wie wä'rs mit UTF-8?            Zitieren

Zitat:
Ich übertrage einen entsprechenden Content-Type Header mit der Information text/html; charset=UTF-16LE - aber das zeigt keinerlei Wirkung.


Ich habe nach einigen Versuchen meine Internetseiten in UTF-8 codiert. Das funktioniert mit allen gängigen Browsern einwandfrei, auch Russisch und Chinesisch ist kein Problem.

- Richard
Jakob Hofmann
Unregistrierter




Beitrag Jakob Hofmann Unregistrierter 14:26:58 03.09.2010   Titel:              Zitieren

[quote="Calando
Ich habe nach einigen Versuchen meine Internetseiten in UTF-8 codiert. Das funktioniert mit allen gängigen Browsern einwandfrei, auch Russisch und Chinesisch ist kein Problem.
- Richard[/quote]

Über Tipps wäre ich dankbar, weil bis jetzt läuft es nicht;

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
CString  tester2 = _T("&#1102;");

UINT size = tester2.GetLength();

CStringA utf8;
int len = WideCharToMultiByte(CP_UTF8, 0,
              tester2.GetString(),
                   -1, NULL, 0, 0, 0);

char *ptr = utf8.GetBuffer(len-1);
if (ptr) WideCharToMultiByte(CP_UTF8, 0, tester2.GetString(), -1, ptr, len, 0, 0);
utf8.ReleaseBuffer();
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
CString tester2 = _T("&#1102;");

UINT size = tester2.GetLength();

CStringA utf8;
int len = WideCharToMultiByte(CP_UTF8, 0,
tester2.GetString(),
-1, NULL, 0, 0, 0);

char *ptr = utf8.GetBuffer(len-1);
if (ptr) WideCharToMultiByte(CP_UTF8, 0, tester2.GetString(), -1, ptr, len, 0, 0);
utf8.ReleaseBuffer();
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
CString  tester2 = _T("&#1102;");

UINT size = tester2.GetLength();

CStringA utf8;
int len = WideCharToMultiByte(CP_UTF8, 0,
              tester2.GetString(),
                   -1, NULL, 0, 0, 0);

char *ptr = utf8.GetBuffer(len-1);
if (ptr) WideCharToMultiByte(CP_UTF8, 0, tester2.GetString(), -1, ptr, len, 0, 0);
utf8.ReleaseBuffer();


Leider funktioniert dieser Code nicht; das Cyrillic-Zeichen mit 0x044E wird in utf-8 nicht mit 0x04 0x4E oder ähnlichem dargestellt, sondern erhält eine komplett andere Hex-Kennzeichnung.

Meine html-Resource ansich hab ich als UTF-8 (ohne Signatur) in VS abgespeichert, öffnen tut sie Windows mit UTF-16LE.

Gruß
Jakob
Jakob Hofmann
Unregistrierter




Beitrag Jakob Hofmann Unregistrierter 14:29:38 03.09.2010   Titel:   Re: Unicode UTF-16LE            Zitieren

SG1!@home schrieb:
Jakob Hofmann schrieb:
Ich übertrage einen entsprechenden Content-Type Header mit der Information text/html; charset=UTF-16LE - aber das zeigt keinerlei Wirkung.


Wie sind denn Deine Header codiert? Wenn die auch schon UTF16 sind, wundert's mich nicht. Versuch mal, die in US-ASCII zu versenden.


Die Header werden mit der Methode WideCharToMultiByte in UTF-8 konvertiert und daher auch entsprechend richtig dargestellt. Lediglich die Daten werden nicht richtig dargestellt, sobald Cyrillic-Zeichen oder ähnliches vorhanden sind. Hier scheint die Funktion WideCharToMultiByte nicht richtig zu funktionieren.
Jakob Hofmann
Unregistrierter




Beitrag Jakob Hofmann Unregistrierter 14:49:18 03.09.2010   Titel:              Zitieren

hier mal ein kleines Bsp:

http://en.wikipedia.org/wiki/Cyrillic_(Unicode_block)
Wenn ich den Character mit dem Code 0411 auf dieser Seite umwandle, dann bekomm ich im utf-8 format "0xC3 0x90 0xE2 0x80 0x98"
SG1
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.03.2001
Beiträge: 2409
Beitrag SG1 Mitglied 15:12:01 03.09.2010   Titel:              Zitieren

Jakob Hofmann schrieb:
Leider funktioniert dieser Code nicht; das Cyrillic-Zeichen mit 0x044E wird in utf-8 nicht mit 0x04 0x4E oder ähnlichem dargestellt, sondern erhält eine komplett andere Hex-Kennzeichnung.


Das ist normal.

Jakob Hofmann schrieb:
hier mal ein kleines Bsp:

http://en.wikipedia.org/wiki/Cyrillic_(Unicode_block)
Wenn ich den Character mit dem Code 0411 auf dieser Seite umwandle, dann bekomm ich im utf-8 format "0xC3 0x90 0xE2 0x80 0x98"


Das wiederum nicht. 0x0411 sollte in UTF8 0xD091 ergeben, 0x044E 0xD1AE. Falls ich mich jetzt nicht verrechnet hab.
Jakob Hofmann
Unregistrierter




Beitrag Jakob Hofmann Unregistrierter 15:24:03 03.09.2010   Titel:              Zitieren

[quote="SG1]Das wiederum nicht. 0x0411 sollte in UTF8 0xD091 ergeben, 0x044E 0xD1AE. Falls ich mich jetzt nicht verrechnet hab.[/quote]

Wie wird das denn berechnet? In erster Linie verwundert es mich, dass ich mehr als zwei Zeichen bekomme für ein Cyrillic-Zeichen :-(

Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Beschreibung der Seite</title>
</head>
<body>
&#1041;
</body>
</html>
Code:
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Beschreibung der Seite</title>
</head>
<body>
&#1041;
</body>
</html>
Code:
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Beschreibung der Seite</title>
</head>
<body>
&#1041;
</body>
</html>


Und für die Zeile "Б" erhalte ich dann im Hex-Format :(c390e28098 0d0a); die letzten beiden Zeichen sind klar. Das versteh ich gar nicht. Anschauen tu ich mir die Daten (Hex-Format) mit dem Wireshark.

Gruß
Jakob
Jakob Hofmann
Unregistrierter




Beitrag Jakob Hofmann Unregistrierter 15:58:08 03.09.2010   Titel:              Zitieren

Bin etwas weiter gekommen; also die Funktion WideCharToMultiByte scheint zu funktionieren im ersten Fall aber nicht im zweiten Fall;

Fall1:
C/C++ Code:
CStringW  tester2 = _T("&#1041;");
CStringA utf8 = UTF16toUTF8(tester2);
C/C++ Code:
CStringW tester2 = _T("&#1041;");
CStringA utf8 = UTF16toUTF8(tester2);
C/C++ Code:
CStringW  tester2 = _T("&#1041;");
CStringA utf8 = UTF16toUTF8(tester2);


Hier bekomm ich die von dir genannten 0xD0 0x90


C/C++ Code:
LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
rString = CStringW(lpcHtml);
CStringA utf8 = UTF16toUTF8(rString);
C/C++ Code:
LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
rString = CStringW(lpcHtml);
CStringA utf8 = UTF16toUTF8(rString);
C/C++ Code:
LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
rString = CStringW(lpcHtml);
CStringA utf8 = UTF16toUTF8(rString);


Hier leider nicht... d.h. hier läuft etwas grundlegendes schief. Leider seh ich den Fehler so nicht...

Gruß
Jakob
Jakob Hofmann
Unregistrierter




Beitrag Jakob Hofmann Unregistrierter 16:17:28 03.09.2010   Titel:              Zitieren

also hier liegt der Fehler auf jeden Fall begraben


C/C++ Code:
LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
rString = CStringW(lpcHtml);

UINT pos1 = rString.GetAt(0); //liefert 208 (ist richtig)
UINT pos2 = rString.GetAt(1); //liefert 8216 (ist leider falsch)...

CStringA utf8 = UTF16toUTF8(rString);
C/C++ Code:
LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
rString = CStringW(lpcHtml);

UINT pos1 = rString.GetAt(0); //liefert 208 (ist richtig)
UINT pos2 = rString.GetAt(1); //liefert 8216 (ist leider falsch)...

CStringA utf8 = UTF16toUTF8(rString);
C/C++ Code:
LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
rString = CStringW(lpcHtml);

UINT pos1 = rString.GetAt(0); //liefert 208 (ist richtig)
UINT pos2 = rString.GetAt(1); //liefert 8216 (ist leider falsch)...

CStringA utf8 = UTF16toUTF8(rString);


Wenn ich mir die test.html Datei im Hex-Editor anschaue, dann steht auch 0xD0 0x91 drinnen... Was muss ich schreiben, damit die Datei richtig importiert wird in VS?
C/C++ Forum :: MFC (Visual C++) ::  Unicode UTF-16LE  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.