如何将字符串截断为不超过 50 个字节?
\n\na = 'asdfzx\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94awelkjawletjawetr\xeb\xb0\xa9\xea\xb0\x91\xec\x8a\xb5\xeb\x8b\x88\xeb\x8b\xa4.dlgawklejtwgasdgsdfgd\nsdfasdfsdafa\xea\xb6\x81\xea\xb8\x88\xed\x95\xb4\xec\x9a\x94rewgargasregawergedrhsedhesrdhrthdrfjydjdrktydjdyj'\nmax = 50byte\na = max(a)\nRun Code Online (Sandbox Code Playgroud)\n 我一直试图调试这个太久了,我显然不知道我在做什么,所以希望有人可以提供帮助.我甚至不确定我应该问什么,但在这里:
我正在尝试发送Apple推送通知,并且它们的有效负载大小限制为256字节.所以减去一些开销的东西,我留下了大约100个主要消息内容的英文字符.
因此,如果消息长于最大值,我会截断它:
MAX_PUSH_LENGTH = 100
body = (body[:MAX_PUSH_LENGTH]) if len(body) > MAX_PUSH_LENGTH else body
Run Code Online (Sandbox Code Playgroud)
所以这很好,花花公子,无论我有多长时间的消息(英文),推送通知发送成功.但是,现在我有一个阿拉伯字符串:
str = "??? ?????
??? ????? ??? ??? ??? ??? ?????
??? ????? ??? ??? ???
???? ?"
>>> print len(str)
109
Run Code Online (Sandbox Code Playgroud)
所以这应该截断.但是,我总是得到无效的有效负载大小错误!好奇,我一直在降低MAX_PUSH_LENGTH阈值以查看它成功需要什么,并且直到我将限制设置为大约60才推动通知成功.
我不确定这是否与英语以外的语言字节大小有关.我的理解是英文字符占用一个字节,阿拉伯字符占用2个字节也是如此?这可能与它有关吗?
此外,字符串在发送之前是JSON编码的,因此最终看起来像这样:\u0647\u064a\u0643 \u0628\u0646\u0643\u0648\u0646 \n\u0639\u064a\u0634 ...它是否被解释为原始字符串,而u0647只是5个字节?
我该怎么办?有没有明显的错误,或者我没有问正确的问题?