获取数据并解码它会给出稀有字符

Getting data and decoding it gives rare characters

我正在尝试从 Arduino 获取一些数据,但我无法解码来自它的数据。我搜索了一些信息,并找到了这些答案,例如:

Introduction to Unicode

Unicode string to String in python

Arduino 正在以 8 位编码 (UTF-8) 发送数字(数据)。 我尝试了很多不同的代码,我得到的最好的解码是这样的:

我正在使用 SublimeText 2 编写代码,这就是我使用 print 时控制台显示的内容。我需要对数据进行解码,以便稍后使用它来绘制matplotlib图形。

我写的最后一段代码给出了如上所示的输出:

class readData(QWidget):

  def __init__(self):
    super(readData, self).__init__()

    self.resize(300, 100)

    self.btn = QPushButton("Close", self)
    self.btn.setGeometry(150, 50, 100, 30)

    self.btn_2 = QPushButton("Search Data", self)
    self.btn_2.setGeometry(50, 50, 100, 30)

    self.btn.clicked.connect(self.close)
    self.btn_2.clicked.connect(self.searchData)

def searchData(self):
    arduinoData = serial.Serial('com7', 9600) #We open port com7

    while True:
        print "Searching for data"
        while(arduinoData.inWaiting() == 0): #We wait for the data
            print "There is no data"            

        print "Reading and converting data"
        arduinoString = str(arduinoData.readline())
        ardString = unicode(arduinoString, errors = "ignore")
        print "This is the data: "
        print type(arduinoString)
        print ""
        print arduinoString
        print type(ardString)

def close(self):
    #WE CLOSE THE WINDOW AND THE PORT

我打开一个简单的 QWidget 来显示两个按钮:一个开始搜索数据并显示它,另一个关闭 window 和端口。这是简单的 window:

我必须如何解码(或编码,我现在真的不知道)以显示我需要的数字?我究竟做错了什么?我希望你能帮助我。

字符串本质上是一个字符序列。每个字符都可以由一个或多个字节表示。这个从 'byte - (1 or more)' 到 'char' 的映射就是 'transformation format'。那里有几个约定:

  • UTF-8
  • UTF-16
  • ASCII

当您从 Arduino 收到一些字节时,您需要告诉 Python 您遵循的约定。以下是一些示例:

    # Receive data example
    rawData = arduino.readLine()
    myString = rawData.decode('utf-8')
    print(myString)

    # Transmit data example
    myString = "Hello world"
    rawData = myString.encode('utf-8')
    arduino.sendLine(rawData)

希望对您有所帮助:-)