如何使用HTTP标头发送非英文unicodestring?

我是HTTP相关事宜的新手。 我的问题是在iOS开发中,我想用HTTP Header发送一个string,所以我使用:

[httpRequest setValue:@"nonEnglishString" forHTTPHeaderField:@"customHeader"]; 

接收服务器是Python(Google App Engine),使用以下命令将string值保存为数据库模型中的string属性:

 dataEntityInstance.nonEnglishString = unicode(self.request.headers.get('customHeader') 

但是,问题是当我尝试发送像韩文这样的非英文string时,它就像这样保存在HTTP标头中:

 Customheader = "\Uc8fc\Uba39\Uc774 \Uc6b4\Ub2e4"; 

当它被Google App Engine收到并保存在DataStore中时,就会变成:

 ??? ?? 

就好像它找不到unicode值的正确字符一样。

是不是可以或不允许使用HTTP标头发送非英文string?

如果我的iOS只使用setHTTPBody,它可以传输非英文string并正确保存到App Engine的DataStore。

 [httpRequest setHTTPBody:[httpBody dataUsingEncoding:NSUTF8StringEncoding]]; 

但我无法find正确的方法来实现相同的目标,使用HTTP头,就像Foursquare所做的许多API一样,并以基于Python的Google App Engine数据存储

是不是可以或不允许使用HTTP标头发送非英文string?

根据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码,没有控制码。 如果你想要更多,你将不得不提出一个编码scheme(如UTF-8 + base64)。 RFC2616标准build议将RFC2047编码字作为标准的编码forms,但是在RFC2047本身允许的时候,这是没有意义的,没有任何支持。

在HTTP头中可以使用ISO 8859-1以外的字符集,但是它们必须按照RFC 2047中的描述进行编码。