首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用HTTP header发送非英语unicode字符串?

如何使用HTTP header发送非英语unicode字符串?
EN

Stack Overflow用户
提问于 2011-03-25 01:39:37
回答 3查看 9.8K关注 0票数 24

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

代码语言:javascript
复制
[httpRequest setValue:@"nonEnglishString" forHTTPHeaderField:@"customHeader"];

接收服务器是Python(Google App Engine),使用以下命令将db模型中的字符串值保存为StringProperty:

代码语言:javascript
复制
dataEntityInstance.nonEnglishString = unicode(self.request.headers.get('customHeader')

然而,问题是当我尝试发送像韩语这样的非英语字符串时,它被保存在HTTP头中,如下所示:

代码语言:javascript
复制
Customheader = "\Uc8fc\Uba39\Uc774 \Uc6b4\Ub2e4";

当它被Google App Engine接收并保存在DataStore中时,它被更改为:

代码语言:javascript
复制
??? ??

就好像它找不到适合Unicode值的字符一样。

是否不能或不允许使用HTTP头发送非英语字符串?

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

代码语言:javascript
复制
[httpRequest setHTTPBody:[httpBody dataUsingEncoding:NSUTF8StringEncoding]];

但我就是找不到正确的方法来实现同样的目标,就像许多像Foursquare这样的API所做的那样,并在基于Python的Google App Engine的DataStore中以适当的形式保存字符串

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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本身中何时允许使用它们的定义,这是没有意义的,而且没有任何东西支持它。

票数 29
EN

Stack Overflow用户

发布于 2011-03-25 01:46:18

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

票数 5
EN

Stack Overflow用户

发布于 2021-08-19 05:45:49

RFC 8187描述了以不同编码传递标头值的方式:

代码语言:javascript
复制
Extended notation, using the Unicode character U+00A3 ("£", POUND SIGN):

     foo: bar; title*=utf-8'en'%C2%A3%20rates
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5423223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档