簡體   English   中英

Python腳本將亂碼寫入文件

[英]Python script writes gibberish to file

這是我用來接收syslog並將其附加到文本文件的腳本:

# Receives packets on udp port 514 and
# writes to syslog.txt

from socket import *

# Set the socket parameters
host = "myhost"
port = 514
buf = 1024
addr = (host,port)

# Create socket and bind to address
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)

# Receive messages
while 1:
    data,addr = UDPSock.recvfrom(buf)
    if not data:
        print "Client has exited!"
        break
    else:
        print "\nReceived message '", data,"'"

        # This will create a new file or overwrite an existing file.
        with open("C:\syslog.txt", "a") as myfile:
            myfile.write(str(data))

# Close socket
UDPSock.close()

腳本可以正常工作,並且文本會附加到文件中。 我看到了,而且閱讀很好。 但是,當我關閉python時,該txt文件數據被轉換為亂碼文本。 有什么想法嗎? 在將套接字數據附加到文件之前,我是否應該做其他事情?

謝謝。

您沒有解析syslog數據包。 Syslog 是一個協議 ; 這不只是純文本。 數據字符很有可能最終出現在文件中,這可能會導致某些自動字符檢測失敗。

這可能直接完成您想要實現的目標(解析syslog協議並將其轉儲): http : //pypi.python.org/pypi/loggerglue/0.9

我本來建議做open(“ C:\\ syslog.txt”,“ at”)而不是open(“ C:\\ syslog.txt”,“ a”),但是重新讀取python dox,文本是默認值(與C不同,我的內存說二進制是默認值,在Windows上運行時會導致問題)。

我的另一個建議是,在您首次創建文件時,在文件頂部放置一個純文本標題。 不確定之后要使用什么來讀取文件,但是Notepad和Wordpad使用一些試探法來確定正在使用什么UTF-8或其他編碼,並且我肯定已經看到這種情況嚴重失敗了。 (搜索wordpad BOM猜測)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM