您可能会在 Twitter API 处理使用 UTF-8 字符的字符计数的方式上找到此页面,这有助于解释为什么某些 UTF-8 字符可以在推文末尾工作而其他字符不能:
https://dev.twitter.com/docs/counting-characters
至于您的实际问题,请将以下 client_args 定义插入您的代码中:
from twython import Twython
APP_KEY = "key"
APP_SECRET = "key-secret"
OAUTH_TOKEN = "token"
OAUTH_TOKEN_SECRET = "secret"
client_args = {
"headers": {
"accept-charset": "utf-8"
}
}
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
这应该告诉 Twitter API 接受来自您的应用程序的 UTF-8 字符。然后你只需要确保你的脚本/代码和它的所有接口也接受 UTF-8。然后,您需要做的就是创建您在键入推文或 DM 并发送时所追求的角色。
如果上面的 client_args 设置没有与在 shell 和其他程序中指定您的字符集结合使用,则可能需要围绕正在传输的特定标头进行调整。例如,您可能会发现“content-type”是一个更好的设置或需要包含它的标头(尽管它不应该是)。
我的大部分推文都是通过 Emacs 发送的(推特模式或在 Emacs 缓冲区中调用 Twython 脚本的 shell),我认为发送整个范围的 UTF-8 字符(最高 Unicode 5.1 或 5.2)没有问题。
我实际上不需要用我的脚本设置自定义标头,但那是因为 UTF-8 是我对以下所有内容的默认字符集:Emacs、bash (shells)、Firefox、Thunderbird、GPG(最后一个不需要影响 Twitter,但总是值得鼓励使用),最后是 Twitter API 本身。如果我还没有将所有其他东西默认设置为使用 UTF-8,那么我几乎肯定会通过 shell 脚本和其他地方的 Unicode 遇到麻烦。
最后,如果您发现大多数 UTF-8 字符可以通过您的脚本发送,但一些(通常不太常见或相对较新的)字符不能,那么很可能是由于您的操作系统支持哪个版本的 Unicode 和/ 或可用的字符集(字体)。如果您遇到这个问题,那么您将遇到真正的麻烦,因为即使您设法将正确的字符传输到 Twitter,您的计算机也无法显示它。另一方面,如果您达到了这一点,您至少会看到一些推文,并且错误消息将停止。
Python 请求文档和 Twython 文档提供了有关发送(发布)自定义标头的格式的更多详细信息,并且 Wikipedia 包含标头类型列表。
维基百科列表在这里:
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
不幸的是,我的堆栈帐户最近才被激活,所以我无法链接所有有用的东西。您可能需要查看请求文档(查找“更复杂的 POST 请求”部分)和 Twython 文档(查找“操作请求标头、代理等”部分)。