问题是将字节转换为unicode,而这些字节已经保存在字符串中。举个例子:
s1 = '\xd0\xb1\xd0\xb0'
s2 = b'\xd0\xb1\xd0\xb1'
print(s1) # Here is the problem: prints a trash (аб)
print(s2.decode('utf-8')) # Everything is OK, printing 'ба' (two cyrillic symbols)
我现在能解码多强?我不能在s1声明之前添加b'修饰符,因为s1可能来自互联网,所以我不能像声明s2那样声明s1。 我发现b'修饰符的工作方式类似于bytes()函数,但是当我试图调用它时:
s3 = bytes(s1, 'utf-8')
又有垃圾了:
print(s3.decode('utf-8')) # аб
所以问题是:我应该怎么处理s1,使它成为终端输出中的“ба”?你知道吗
我在谷歌上搜索了很多,但我发现的并不是我需要的。你知道吗
这就是我需要的:
s4 = SOME_WONDERFUL_MAGIC(s1)
print(s4) # Prints 'ба'
非常感谢所有能帮助我的人,请原谅我的英语不好。你知道吗
更新:哦,问题返回了。我希望第一个答案能对我有所帮助,但我发现:
s1 == '\xd0\xb1\xd0\xb0' # BUT
s1 != '\xd0\xb1\xd0\xb0'
我的意思是: 我使用“requests”包向Flask服务器发出POST请求。它回答我:
req = requests.post(hostName)
print(req.text) # b'testText'
# BUT!
print(req.text[2:-1] # testText
这意味着testText的字节表示形式是字符串,如下所示:
s5 = "b'tumba'"
所以真正的问题是:如何从“b'tumba”中提取tumba(如果tumba可能包含西里尔文符号)?你知道吗
s1
可能被错误地解码为某处的ISO-8859-1(latin1)。你知道吗你可以重新编码
你真正的错误是找到解码发生的地方。你知道吗
停止互换处理unicode和字节,战斗就会停止:)
对我有效的快速而肮脏的解决方案:
相关问题 更多 >
编程相关推荐