如何从套接字消息中正确获取换行符和变音符

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