Převod textu do url encode – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Převod textu do url encode – C / C++ – Fórum – Programujte.comPřevod textu do url encode – C / C++ – Fórum – Programujte.com

 

Jarda22
~ Anonymní uživatel
9 příspěvků
24. 8. 2014   #1
-
0
-

Ahoj,

řeším takový problém s převodem českého textu do url encode.

Pro text "čau" by výstup měl být "C4=8Dau", kde to "C4=8D" je "č". Zkouším googlit ale vždy mi to vrací něco jiného nebo jeden hex znak místo dvou. Tento online decoder to třeba umí, ale nedaří se mi to udělat v c++ http://www.url-encode-decode.com/

Nevítě prosím někdo jak na ten převod? Děkuju

Nahlásit jako SPAM
IP: 213.168.183.–
Jarda22
~ Anonymní uživatel
9 příspěvků
24. 8. 2014   #2
-
0
-

#1 Jarda22
Tohle sice funguje jak bych potřeboval, ale ve VS 2013 mi to nebere ten prefix "u8", myslel jsem, že to bude jen v c++11 a ono prd.. nechápu, jak to může na ideone fungovat :-(

http://ideone.com/0kEphU

Nahlásit jako SPAM
IP: 213.168.183.–
Jarda22
~ Anonymní uživatel
9 příspěvků
24. 8. 2014   #3
-
0
-

#2 Jarda22
Tak jsem našel chybu... Visual Studio 2013 nepodporuje všechny novinky C++11 a zrovna prefix u8 patří mezi ně...

Nahlásit jako SPAM
IP: 213.168.183.–
Jarda22
~ Anonymní uživatel
9 příspěvků
24. 8. 2014   #4
-
0
-

Můžete mi ještě poradit, jak mám jinak zapsat: 

string str = u8"ščřž";

Je to pro c++11 a nějak nevim, jak to napsat "normálně", protože bez toho "u8" to nefunguje jak má

Nahlásit jako SPAM
IP: 213.168.183.–
Flowy0
Věrný člen
24. 8. 2014   #5
-
0
-

http://coderstoolbox.net/string/#!encoding=js&action=encode&charset=us_ascii

Nahlásit jako SPAM
IP: 95.103.149.–
https://github.com/Flowy
Jarda22
~ Anonymní uživatel
9 příspěvků
24. 8. 2014   #6
-
0
-

#5 Flowy
Nějak nevim v čem mi to má pomoct. Já vim, jak to má vypadat, posílal jsem i odkaz na online encoder, ale nejde mi to udělat v c++.

Nebo spíš jde o to, že stejnej kód mi v gcc funguje ale ve VS2013 se chová jinak.. tohle v gcc funguje http://ideone.com/gtLE7w ale ve VS2013 to udělá pro slovo "čau" =E8au místo C4=8Dau

Nahlásit jako SPAM
IP: 213.168.183.–
Jarda22
~ Anonymní uživatel
9 příspěvků
24. 8. 2014   #7
-
0
-

Tak fakt nevim.. prohledal jsem snad 20 stránek googlu, otestoval přes 10 různých řešení a vždy mi to vyjde stejně špatně, že z "č" to udělá "E8" místo "C4-8D".

Absolutně netuším kde je chyba a proč to ve VS kompileru nejde a v GCC jde bez problému a hned první řešení.. a to na URL encode mi i google našel plno odkazů a stejně ve VS to nefunguje.

Pokud někdo víte, tak budu fakt rád za pomoc, páč už netušim proč to sakra nejde.. snažim se to udělat bez pomocí externích knihoven (jako třeba curl) a bez winapi

Nahlásit jako SPAM
IP: 213.168.183.–
Jarda22
~ Anonymní uživatel
9 příspěvků
24. 8. 2014   #8
-
0
-

#7 Jarda22
A abych teda něco pástnul, tak tohle třeba funguje v GCC, ale nefunguje ve VisualStudio a nevím proč... 

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

string hex(unsigned int c)
{
    ostringstream stm ;
    stm << '=' << hex << uppercase << c;
    return stm.str() ;
}

string url_encode(const string& str)
{
    static const string unreserved = "0123456789"
                                     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                     "abcdefghijklmnopqrstuvwxyz"
                                     "-_.~" ;
    string result;

    for (int i = 0; i < str.size(); i++) {
        unsigned char c = str[i];
        
        if (unreserved.find(c) != string::npos) {
            result += c;
        } else {
            result += hex(c);
        }
    }
    return result;
}

int main()
{
    string test = "čau";
    string result = url_encode(test); // GCC(C4=8Dau), VS(=E8au)
    cout << test << '\n' << result << '\n';
}

Díky za rady, pomoc, cokoliv co mi pomůže vyřešit problém ve VS :-)

Nahlásit jako SPAM
IP: 213.168.183.–
z
~ Anonymní uživatel
268 příspěvků
25. 8. 2014   #9
-
0
-

Je to quoted-printable a nevím o tom, že by první bajt byl automaticky v hexa a bez escape.

Takže "čau" odpovídá "=C4=8Dau". URL encoded by to bylo "%C4%8Dau".

Asi jsi přišel na to, že znak č je uložen jako dva bajty 0xC4 a 0x8D, pokud je text kódován v UTF-8. Tvoje Windowsy pravděpodobně používají kódování Windows-1250, ve kterém je 'č' uloženo jako jeden bajt 0xE8.

Pokud to máš takhle ve zdrojáku, tak stačí ve VS přepnout kódování souboru na UTF-8 a pak se to č uloží, tak jak očekáváš. Pokud vstup bereš odjinud, tak ho budeš muset nejdříve překódovat z původního kódování do UTF-8.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý