If the display isn't always gibberish, the problem deals with the nature of the crude data interface to the display. 8-bit character selections are transferred as two 4-bit nibbles. These can sometimes get out of sync, and the 2nd nibble for one character gets combined with the first nibble for the next character. Non-ASCII characters will result if the two nibbles point to a character in the display's built-in extended character set. Noise and static hits are possible means of getting into the gibberish mode; the sensitivity of a printer to do this seems to vary considerably. My experience has been that once a display gets into gibberish mode this way, it'll tend to stay that way.

When the display is in gibberish mode, you can prove the nibble-swapping theory by sending it something like an "M117 ccccc" command from your host software, without the quotes. This should cause a string of lower-case c's to be displayed, but in gibberish mode you might get a string of 6's. A 6 is what you get when you combine the last 4 bits of one c ASCII character with the first four bits of the next c.

Marlin has some built-in capability to recover from this known problem. Pressing the encoder knob in should cause Marlin to re-initialize the interface with the LCD. I also found that for an idle printer, insertion/removal of an SD-card also re-initializes the interface.

For more information on this, along with another user's hardware mod to the display ribbon cables, can be found here - Garbled LCD screens