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

标签 python ios google-app-engine unicode http-headers

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

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

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

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

但是,问题是当我尝试发送像韩语这样的非英语字符串时,它会像这样保存在 HTTP header 中:

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

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

??? ??

好像找不到 unicode 值的正确字符。

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

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

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

但我只是找不到使用 HTTP header 实现相同目标的正确方法,就像 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 header 是不可能的。这为您提供了 ASCII(“英语”?)字符以及常见的西欧变音符号。

但是在实践中,您甚至不能使用扩展的 ISO-8859-1 字符,因为服务器和浏览器在如何处理 header 中的非 ASCII 字符方面并不一致。 Safari 采用 RFC2616 字样并将高字节视为 ISO-8859-1 字符; Mozilla 采用 UTF-16 代码单元低字节,类似但更奇怪; Opera 和 Chrome 从 UTF-8 解码; IE 使用本地系统代码页。

所以实际上,您可以在 HTTP header 中输入的只是没有控制代码的简单 ASCII。如果你想要更多,你必须想出一个编码方案(例如 UTF-8+base64)。 RFC2616 标准建议将 RFC2047 编码词作为一种标准的编码形式,但考虑到 RFC2047 本身何时允许使用它们的定义,这是没有意义的,并且没有任何支持。

关于python - 如何使用 HTTP header 发送非英文 unicode 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423223/

相关文章:

php - Slim 框架 fatal error : Uncaught exception 'InvalidArgumentException' with message 'Cannot create LogWriter

google-app-engine - 减少数据存储读取操作

python - 使用 Tensorflow 调用 copy.deepcopy(network) 时出现 "ValueError: Unknown layer: ... "

python - boto3 签名的 url 导致 SignatureDoesNotMatch

ios - 在 Swift 中创建 JSON 参数

ios - JSON 解码器返回没有与 key CodingKeys 关联的值,例如 IAP 收据中的 "expires_date"

google-app-engine - 爆炸式索引和 unix 时间戳

python - 套接字流量字节重复(?)

python - 从分页内容中抓取数据

objective-c - 如何在 iOS/Cocoa 中找到集合对象的内存占用