pet*_*ine 20 python unicode google-app-engine http-headers ios
我是HTTP相关事务的新手.我的问题是在iOS开发中,我想使用HTTP Header发送一个字符串,所以我正在使用:
[httpRequest setValue:@"nonEnglishString" forHTTPHeaderField:@"customHeader"];
Run Code Online (Sandbox Code Playgroud)
接收服务器是Python(Google App Engine),使用以下命令将数据库中的字符串值保存为StringProperty:
dataEntityInstance.nonEnglishString = unicode(self.request.headers.get('customHeader')
Run Code Online (Sandbox Code Playgroud)
但问题是,当我尝试发送像韩语这样的非英语字符串时,它会保存在HTTP标头中,如下所示:
Customheader = "\Uc8fc\Uba39\Uc774 \Uc6b4\Ub2e4";
Run Code Online (Sandbox Code Playgroud)
当它被Google App Engine收到并保存在DataStore中时,它会改为:
??? ??
Run Code Online (Sandbox Code Playgroud)
好像它找不到unicode值的正确字符.
使用HTTP标头发送非英语字符串是不可能的还是允许的?
如果我的iOS只使用setHTTPBody,它可以传输非英文字符串并正确保存到App Engine的DataStore.
[httpRequest setHTTPBody:[httpBody dataUsingEncoding:NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)
但我找不到使用HTTP Headers实现相同目标的正确方法,就像Foursquare所做的许多API一样,并在基于Python的Google App Engine的DataStore中以正确的形式保存字符串
bob*_*nce 23
使用HTTP标头发送非英语字符串是不可能的还是允许的?
根据HTTP标准,不可能将非ISO-8859-1字符直接放在HTTP标头中.这给你ASCII("英语"?)字符加上常见的西欧变音符号.
但实际上,您甚至无法使用扩展的ISO-8859-1字符,因为服务器和浏览器不同意如何处理标头中的非ASCII字符.Safari在其字中采用RFC2616并将高字节视为ISO-8859-1字符; Mozilla采用UTF-16代码单元低字节,这类似但更奇怪; 来自UTF-8的Opera和Chrome解码; IE使用本地系统代码页.
所以实际上你可以放入一个HTTP头是简单的ASCII,没有控制代码.如果你想要更多,你必须提出一个编码方案(例如UTF-8 + base64).RFC2616标准建议使用RFC2047编码字作为标准形式的编码,但考虑到它们在RFC2047本身允许的时间定义,这没有任何意义,并且没有任何内容支持它.
| 归档时间: |
|
| 查看次数: |
8484 次 |
| 最近记录: |