我这里有一个有趣的问题。
首先我有一个 Java 的 UI。 UI 在某一时刻通过套接字连接到网络上的 rpi4。从那里使用 .writeUTF(string) 通过套接字发送数据。
在 rpi4 方面,我正在运行一个简单的 Python 3 脚本。它的唯一目的是吐出 socket 上的任何东西,而且它确实吐出了。但在此之前,我使用recv.decode('utf-8') 来解码字符串。
我从 Java 发送“fillOpen”
在Python中解码后打印“fillOpen”
问题:
在 python 脚本中对解码后的字符串执行字符串比较始终会导致 false。我已经这样设置了:
Command = recv.decode('utf-8')
If Command == "fillOpen":
#Do work
我还尝试不解码字符串并与编码字符串进行比较。因此:
Command = recv
FillOpenCommand =
("fillOpen").encode('utf-8')
If fillOpenCommand == Command:
#Do work
这些比较都不会得出正确的结果。
我读到 Java writeUTF 是 UTF8 编码,但略有“不同”?
我可以调整 .writeUTF 以与 Python 3 解码器一起使用吗?是否有另一种方法可以发送可解析的数据,然后通过 Python 应用字符串比较?
谢谢大家。
最佳答案
假设您正在使用 Java DataOutput
接口(interface)中定义的 writeUTF
方法:
writeUTF 的输出以两个字节的长度信息开始。您可以跳过它,也可以使用它来确保您收到完整的消息。
最简单的方法就是跳过它:
Command = recv[2:].decode('utf-8')
如果您的命令只是 ASCII 并且不包含用户输入、表情符号、乐谱等内容,那么这已经足够了。否则,你仍然有问题。 writeUTF
处理“代理对”字符的方式不是有效的“utf-8”,并且 decode('utf-8')
将抛出 UnicodeDecodeError
.如果我是您,在这种情况下,我会停止使用 writeUTF 并开始使用生成标准 UTF-8 编码数据的方法。
关于java - 比较通过套接字 UTF8 传递的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61027943/