您可能会在 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 发送的(Twittering 模式或在 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 文档(查找“操作请求标头、代理等”部分)。