2011-05-11 36 views
1

我正试图解决Android应用程序中的问题。该应用向Web服务发布HTTP请求。当请求中的文本包含瑞典字符Å,Å和Ö时,它不起作用。拥有Web服务的人说,这是因为请求必须以UTF-8编码,并且他们说这不是。如何知道我的HTTP请求是否使用UTF-8?

该应用程序使用org.apache.http.impl.client.DefaultHttpClient,并且我假设这一行说应该使用UTF-8:HttpProtocolParams.setContentCharset(params,“UTF-8”);

我用Wireshark来看到该应用发送的内容,和字符串 “TeståäöÅÄÖéüà” 被示出为: “测试\ 345 \ 344 \ 366 \ 305 \ 304 \ 326 \ 351 \ 374 \ 340”

我发现by this table这些数字是字符的“Unicode代码点”的八进制表示。这是UTF-8以外的东西,对吧?

是这样的,如果它是UTF-8,那么特殊字符将由两个字节表示,例如, “å”的“c3 a5”和“ä”的“c3 a4”?

因此:
1.我对Unicode和UTF-8的理解是否正确?
2.我是否正确地发送了什么不是UTF-8编码?
3.如何使DefaultHttpClient以UTF-8发送?

乔恩

+2

你是在请求URL(例如'查询'部分)还是请求正文中谈论UTF-8? – 2011-05-11 12:11:54

+0

我想在身体。我怎么知道? – prograde 2011-05-11 14:32:19

回答

2

正如由Stephen指出的那样,则必须在HTTP报头(用于URL)所使用的编码和请求主体之间进行区分。

无论如何,区别不在Unicode与UTF-8之间,UTF-8是UNICODE的字符集编码之一(UTF-16是另一种)。

而且您并未使用Unicode,而是使用旧的Latin1(ISO 8859-1):每个字符一个字节。恰巧,前128个Unicode码点与Latin1使用的位置大致相符。

帮你一个忙,read the basics about Unicode,它应该需要你一两天的时间,对于今天(和明天)的任何程序员来说,这都是非常有价值和必要的知识。

+0

在HTTP POST中,我发布的内容会放在主体中,对吧?如果我没有误解:) – prograde 2011-05-11 14:35:06

+0

是的,你是对的 – leonbloy 2011-05-11 14:36:46

+0

谢谢,很高兴知道它是ISO 8859-1! 今天我已经阅读了关于Unicode几个小时,但我仍然很困惑,但我明白,UTF-8是Unicode编码的许多方法之一,所以我承认我不小心表达了它:) 但是,我是否正确,如果它是UTF-8编码,我会在日志中看到“c3 a5”为“å”? 而我该如何使它在java中编码UTF-8? HttpProtocolParams.setContentCharset(params,“UTF-8”)做了什么? – prograde 2011-05-11 14:43:48

相关问题