gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:53:38 30 4
gpt4 key购买 nike

我是 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com