我是一个新手,HTTP相关的事情。我的问题是在iOS开发中,我想使用Header发送一个字符串,所以我使用:
[httpRequest setValue:@"nonEnglishString" forHTTPHeaderField:@"customHeader"];
接收服务器是Python(Google App Engine),使用以下命令将db模型中的字符串值保存为StringProperty:
dataEntityInstance.nonEnglishString = unicode(self.request.headers.get('customHeader')
然而,问题是当我尝试发送像韩语这样的非英语字符串时,它被保存在HTTP头中,如下所示:
Customheader = "\Uc8fc\Uba39\Uc774 \Uc6b4\Ub2e4";
当它被Google App Engine接收并保存在DataStore中时,它被更改为:
??? ??
就好像它找不到适合Unicode值的字符一样。
是否不能或不允许使用HTTP头发送非英语字符串?
如果我的iOS只使用setHTTPBody,它可以正确地传输非英文字符串并保存到App Engine的DataStore中。
[httpRequest setHTTPBody:[httpBody dataUsingEncoding:NSUTF8StringEncoding]];
但我就是找不到正确的方法来实现同样的目标,就像许多像Foursquare这样的API所做的那样,并在基于Python的Google App Engine的DataStore中以适当的形式保存字符串
发布于 2011-03-25 07:05:50
是否不能或不允许使用HTTP头发送非英语字符串?
根据HTTP标准,不可能将非ISO-8859-1字符直接放入HTTP标头中。这就给出了ASCII (“英语”?)字符加上常见的西欧变音符号。
然而,在实践中,您甚至不能使用扩展的ISO-8859-1字符,因为服务器和浏览器不会就如何处理报头中的非ASCII字符达成一致。Safari在其单词中采用RFC2616,并将高字节视为ISO-8859-1字符;Mozilla采用UTF-16代码单元低字节,这类似但更奇怪;Opera和Chrome解码来自UTF-8;IE使用本地系统代码页。
因此,实际上,您可以放入HTTP标头的所有内容都是简单的ASCII,没有控制代码。如果你想要更多,你必须想出一个编码方案(例如UTF-8+base64)。RFC2616标准建议将RFC2047编码的单词作为一种标准的编码形式,但是考虑到在RFC2047本身中何时允许使用它们的定义,这是没有意义的,而且没有任何东西支持它。
发布于 2011-03-25 01:46:18
可以在HTTP头中使用ISO8859-1以外的字符集,但它们必须按照RFC 2047中所述进行编码。
发布于 2021-08-19 05:45:49
RFC 8187描述了以不同编码传递标头值的方式:
Extended notation, using the Unicode character U+00A3 ("£", POUND SIGN):
foo: bar; title*=utf-8'en'%C2%A3%20rates
https://stackoverflow.com/questions/5423223
复制相似问题