2016-04-11 20 views
3

Niçin Qt5 kodlamak artı% 2B işareti?Qt '+' işareti kodlamıyor

Bu kodu denedim: Hep böyle dize olsun

QUrlQuery urlQuery; 
urlQuery.addQueryItem("test", "hello+world"); 
manager->post(request, urlQuery.toString(QUrl::FullyEncoded).toUtf8()); 

Ama üzerinde sunucunun tarafı:

hello world

% 2B olmadan ve artı işareti olmadan. Bu yüzden sunucu tarafında '+' işareti alamıyorum ...

Qt5 ile nasıl artı işareti gönderebilirim?

+0

İlgili: http://stackoverflow.com/questions/24343582/convert-qurl-with-percent-encoding-into-string?rq=1 – IAmInPLS

+1

Neden 'QNetworkRequest kullanmak yerine url'yi bir dizeye dönüştürüyorsunuz? : setUrl'? – Ilya

+0

Bunun için url değildir. Mesaj verileri için. – Mike

cevap

3

Qt5 ile nasıl bir artı işareti gönderebilirim?

bir QByteArray kullanın post veriler için bir url kullanmayın. Olduğu gibi gönderilecektir. boşluk

Taşıma ve artı ("+")

:

DÜZENLEME

Ek bilgiler QUrlQuery için, + işareti özel (doc itibaren) böyledir

Web tarayıcıları genellikle HTML FORM öğelerinde bulunan boşlukları artı işaretine ("+") ve artı yüzde kodlanmış forma (% 2B) işaret eder. Ancak, URL'leri yöneten Internet özellikleri, boşlukları ve artı karakter eşdeğerini dikkate almaz. Bu nedenle, QUrlQuery hiçbir zaman boşluk karakterini "+" olarak kodlamaz ve asla bir boşluk karakterini "+" kod çözemez. Bunun yerine, boşluk karakterleri kodlu formda "% 20" olarak işlenecektir. HTML formları gibi kodlamayı desteklemek için, QUrlQuery ayrıca "% 2B" dizisini artı işaretine deşifre etmeyecek ve bir artı işaretini kodlayamayacaktır. Aslında, anahtarlar, değerler, veya sorgu dizesinde bulunan herhangi bir "% 2B" veya "+" dizileri, tam olarak yazılı olarak bırakılır ( "% 2b" nin "% 2B" ye yükseltilmesi hariç).

Yani dizeleri + işaretleri içeren için QUrlQuery kullanmak istiyorsanız, bunu kodlayan kendinizi ("+" =>"%2B") yapmak zorunda görünüyor, bunun için statik yöntemini QUrl::toPercentEncoding() kullanabilirsiniz.

+0

Nasıl söylediğini denedim. 'QByteArray dataToSend (" POSTDATA = merhaba + dünya "); manager-> post (request, dataToSend); 'Sunucu tarafında bende:' POSTDATA: hayır dünyası yine artı işareti olmadan. – Mike

+0

@Mike ContentTypeHeader'ı nasıl tanımladınız, "application/Json"? Eğer Json ise, verilerinizi QJsonDocument.toJson() 'kullanarak geçerli bir Json dokümanı olarak gönderir misiniz? – Ilya

+0

"request.setHeader (QNetworkRequest :: ContentTypeHeader," application/x-www-form-urlencoded ") kullanıyorum, aksi takdirde sunucuya parametrs ile gönderim yapamıyorum. – Mike