如何从套接字消息中正确获取换行符和变音符
How to get newline and Umlaut correctly from a socket message
我在这样的套接字上收到信息:
import socket
s = socket.socket()
while True:
try:
data = self.s.recv(1024)
answer = data.decode()
print(answer)
if data.decode() != "":
break
except socket.timeout:
break
发送的信息包括有关换行的信息以及德语变音符号(Ä、Ö、Ü 等)。如何正确打印两者?假设收到的文本是 "Äpfel fallen \n nicht weit vom Stamm"
。如果我的代码保持如上,它会打印如下:
Äpfel fallen \n nicht weit vom Stamm
我读到我可以使用 decode('unicode_escape')
来正确处理换行符,但由于 unicode 无法处理变音符号,因此我的结果如下所示:
Äpfel fallen
nicht weit vom Stamm
我怎样才能达到我想要的结果:
Äpfel fallen
nicht weit vom Stamm
编辑:
如果我打印 data
,它看起来像这样:
b'\xc3\x84pfel fallen \n nicht weit vom Stamm'
我找到了适合我的情况的解决方案。通过在保存答案时添加 .replace(r"\n","\n")
,我只需将原始字符串替换为换行符的正确符号,而无需进一步 decode/encode。这也可以通过其他符号(\t 等)轻松扩展。
import socket
s = socket.socket()
while True:
try:
data = self.s.recv(1024)
answer = data.decode().replace(r"\n","\n")
if data.decode() != "":
break
except socket.timeout:
break
我在这样的套接字上收到信息:
import socket
s = socket.socket()
while True:
try:
data = self.s.recv(1024)
answer = data.decode()
print(answer)
if data.decode() != "":
break
except socket.timeout:
break
发送的信息包括有关换行的信息以及德语变音符号(Ä、Ö、Ü 等)。如何正确打印两者?假设收到的文本是 "Äpfel fallen \n nicht weit vom Stamm"
。如果我的代码保持如上,它会打印如下:
Äpfel fallen \n nicht weit vom Stamm
我读到我可以使用 decode('unicode_escape')
来正确处理换行符,但由于 unicode 无法处理变音符号,因此我的结果如下所示:
Äpfel fallen
nicht weit vom Stamm
我怎样才能达到我想要的结果:
Äpfel fallen
nicht weit vom Stamm
编辑:
如果我打印 data
,它看起来像这样:
b'\xc3\x84pfel fallen \n nicht weit vom Stamm'
我找到了适合我的情况的解决方案。通过在保存答案时添加 .replace(r"\n","\n")
,我只需将原始字符串替换为换行符的正确符号,而无需进一步 decode/encode。这也可以通过其他符号(\t 等)轻松扩展。
import socket
s = socket.socket()
while True:
try:
data = self.s.recv(1024)
answer = data.decode().replace(r"\n","\n")
if data.decode() != "":
break
except socket.timeout:
break