python – 如何使用HTTP头发送非英文unicode字符串?

我是新手的HTTP相关事宜.
我的问题是在iOS开发中,我想使用HTTP头发送一个字符串,所以我使用:

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

接收服务器是Python(Google App Engine),将数据库模型中的字符串值保存为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]];

但是,我找不到使用HTTP标头达到同样目标的正确方法,像Foursquare这样的许多API,并且在基于Python的Google App Engine的DataStore中以正确的形式保存了字符串

Is it not POSSIBLE or ALLOWED to send non-English string using HTTP Header?

根据HTTP标准不可能将非ISO-8859-1字符直接放在HTTP标头中.这给你ASCII(“英语”?)字符加上普通的西欧变音符号.

但实际上您甚至不能使用扩展的ISO-8859-1字符,因为服务器和浏览器不同意头文件中的非ASCII字符的处理方式. Safari采用RFC2616,并将高字节视为ISO-8859-1字符; Mozilla采用UTF-16代码单位低字节,这是相似但是weirder; Opera和Chrome从UTF-8解码; IE使用本地系统代码页.

所以在现实中,你可以放入一个HTTP头是简单的ASCII,没有控制代码.如果你想要更多的东西,你必须提出一个编码方案(如UTF-8 base64). RFC2616标准建议RFC2047编码字作为标准的编码形式,但是由于RFC2047本身允许时间的定义,没有任何支持.

代码日志版权声明:
翻译自:http://stackoverflow.com/questions/5423223/how-to-send-non-english-unicode-string-using-http-header

转载注明原文:python – 如何使用HTTP头发送非英文unicode字符串?