Does the file display correctly if you
cat it (or used
head to shorten the output)?
I think the key to making
less display the file properly lies in setting
LC_ALL properly. On your local system and the remote system compare the values of those variables and see if they are different and whether changing the remote one to match makes a difference.
less man page (Note the last sentence):
If neither LESSCHARSET nor LESSCHARDEF is set, but any of the strings
"UTF-8", "UTF8", "utf-8" or "utf8" is found in the LC_ALL, LC_TYPE or
LANG environment variables, then the default character set is utf-8.
If that string is not found, but your system supports the setlocale
interface, less will use setlocale to determine the character set.
setlocale is controlled by setting the LANG or LC_CTYPE environment
Finally, if the setlocale interface is also not available, the default
character set is latin1.
Control and binary characters are displayed in standout (reverse
video). Each such character is displayed in caret notation if possible
(e.g. ^A for control-A). Caret notation is used only if inverting the
0100 bit results in a normal printable character. Otherwise, the char‐
acter is displayed as a hex number in angle brackets.