The serial monitor shows some garbage values

I am using an RF Receiver to receive data. The data is being printed to the serial monitor. But along with that data it is printing garbage values like this:

0
° ×

0
° ×

0
° ×

0
° ×

0
° ×

0
° ×

0
° × --> this is the garbage value (in python it shows like this: b'\xb0\t\xd7\r\n')

I am not sure how this is coming, and not sure if it is a software or hardware issue. I have also changed both the transmitter and receiver modules but same result.

Is there any way I can avoid printing the garbage value?

Here is my code:
Transmitter:

#include <RH_ASK.h>
#include <SPI.h> 

RH_ASK rf_driver(2000,8,7,4,false);

int buttonPin1 = 30;
int buttonPin2 = 26;
int buttonPin3 = 28;
int buttonPin4 = 32;

int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
void setup()
{
    // Initialize ASK Object
    rf_driver.init();
    pinMode(buttonPin1,INPUT);
    pinMode(buttonPin2,INPUT);
    pinMode(buttonPin3,INPUT);
    pinMode(buttonPin4,INPUT);
    Serial.begin(9600);
}
 
void loop()
{
    buttonState1 = digitalRead(buttonPin1);
    buttonState2 = digitalRead(buttonPin2);
    buttonState3 = digitalRead(buttonPin3);
    buttonState4 = digitalRead(buttonPin4);
    
    const char *msg1 = "1";
    const char *msg2 = "2";
    const char *msg3 = "3";
    const char *msg4 = "4";
    const char *msg0 = "0";

    if(buttonState1 == HIGH){
      rf_driver.send((uint8_t *)msg1, strlen(msg1));
      rf_driver.waitPacketSent();
      delay(100);
    }

    else if(buttonState2 == HIGH){
      rf_driver.send((uint8_t *)msg2, strlen(msg2));
      rf_driver.waitPacketSent();
      delay(100);
    }

    else if(buttonState3 == HIGH){
      rf_driver.send((uint8_t *)msg3, strlen(msg3));
      rf_driver.waitPacketSent();
      delay(100);
    }

    else if(buttonState4 == HIGH){
      rf_driver.send((uint8_t *)msg4, strlen(msg4));
      rf_driver.waitPacketSent();
      delay(100);
    }

    else{
      rf_driver.send((uint8_t *)msg0, strlen(msg0));
      rf_driver.waitPacketSent();
      delay(100);
      //Serial.println("Done");
    }
}

Receiver

#include <RH_ASK.h>
// Include dependant SPI Library 
#include <SPI.h>      
 
// Create Amplitude Shift Keying Object
RH_ASK rf_driver(2000,8,7,4,false);
 
void setup()
{
    // Initialize ASK Object
    rf_driver.init();
    // Setup Serial Monitor
    Serial.begin(9600);
}
 
void loop()
{
    // Set buffer to size of expected message
    uint8_t buf[1];
    uint8_t buflen = sizeof(buf);
    // Check if received packet is correct size
    if(rf_driver.recv(buf, &buflen)){
      
      // Message received with valid checksum
      //Serial.print("Message Received: ");
      //if((char*)buf == "0")
      Serial.println((char *)buf);
    }
}

You are not receiving a string, so you should not be attempting to print a string.

const char *msg0 = "0";

rf_driver.send((uint8_t *)msg0, strlen(msg0));

you're attempting to send a string and the length is actually 1, but you also need to send the terminating NUL.

When you receive the msg and attempt to print the received msg, "buf" will be displayed up to the next NUL that may be somewhere in buf

So I suggest you try sending strlen()+1 so that in this case msg0 is sent with 2 bytes including a terminating NUL