The problem is your keyboard layout.
The USB HID protocol was originally intended to include keyboard layout information in it (country code selection in the descriptor) however no one ever used it. All keyboards have the same layout, but manufacturers just print different letters on the keys for different countries. It's down to the operating system to map those key codes to actual characters using the keyboard layout selected in the operating system. (The original intended method of operation would have allowed keyboards to select their own language instead of having a single global one in the OS, but people do like to choose the cheapest option...).
The Arduino is effectively a US keyboard. The letters and numbers you "print" are first converted to their keyboard codes as they would appear on a US keyboard. Those keyboard codes are then converted back to letters and numbers using your Italian keyboard layout selected in the operating system.
You would get the same effect if you got a US keyboard and plugged it in. Pressing the keys for the symbols as printed on the keys themselves you give you the same wrong characters. Pressing the keys that you are used to pressing and ignoring what is printed on the keys would give you the right symbols.
So you have a number of options:
- Use a US keyboard globally on your computer, which would break your existing keyboard layout, or
- Modify the Arduino core to map the characters using an Italian keymap, or
- Work out which characters you should be sending to get the right ones for your keymap, and change your code to send those characters instead.
Of the three I'd go for option 3. Option 1 would be too annoying, option 2 would be undone with the next Arduino core update and you'd never remember what you did. So spend some time and work out which characters, when you print them, result in which characters being typed.