【发布时间】:2020-05-03 07:56:15
【问题描述】:
我坚持在字符串中获取位置。 我读了一个文件的内容
with io.open(testfile, 'r', encoding='utf-8') as f
\u2705 Offizielle Kan\u00e4le \ud83c\udde9\ud83c\uddea \ud83c\udde6\ud83c\uddf9 \ud83c\udde8\ud83c\udded\n@GET_THIS_STING
我该怎么办 - “\u2705” 算作 1 个字母? 那么位置 36 将是 @GET_THIS_STING 的开始
--== 编辑 ==-- 我现在可以更好地说明问题所在:
import json
from io import open
line = '{"message":{"message_id":3052,"text":"\u2705 Offizielle Kan\u00e4le \ud83c\udde9\ud83c\uddea \ud83c\udde6\ud83c\uddf9 \ud83c\udde8\ud83c\udded\\n@GET_THIS_STING\\n123456789","entities":[{"offset":36,"length":26,"type":"mention"}]}}'
myjson = json.loads(line)
text = myjson.get("message", {}).get("text", None)
print(str(text).encode('utf-8', 'replace').decode())
print("string length: " + str(len(text)))
print(text[36:36+15])
print("-------------")
with open("/home/pi/telegram/phpLogs/test.txt", 'r', encoding='utf-8', errors="surrogateescape") as f:
for line in f:
myjson = json.loads(line)
text = myjson.get("message", {}).get("text", None)
print(text)
print("string length: " + str(len(text)))
print(text[36:36+15])
结果:
✅ Offizielle Kanäle ???? ???? ????
@GET_THIS_STING
123456789
string length: 61
@GET_THIS_STING
-------------
✅ Offizielle Kanäle ???????? ???????? ????????
@GET_THIS_STING123456789
string length: 54
HIS_STING123456
因此,当我将代码 (UTF-8) 中的字符串作为变量 (String) 时,一切正常。 但是当我创建一个包含内容的文件并阅读它时
"{"message":{"message_id":3052,"text":"\u2705 Offizielle Kan\u00e4le \ud83c\udde9\ud83c\uddea \ud83c\udde6\ud83c\uddf9 \ud83c\udde8\ud83c\udded\\n@GET_THIS_STING\\n123456789","entities":[{"offset":36,"length":26,"type":"mention"}]}}"
我总是收到“错误”的结果 :( 所以读取文件是我的问题,因为之后的字符串不一样——甚至长度都不一样!
【问题讨论】:
-
哪个 Python 版本?
-
python 版本 3.6 在带有 Raspbian 的树莓上 是的 - 该文件包含带有 \u 的字符串
标签: python unicode encoding position substring