diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index 0727b2bc2dab..ca5391d34e77 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -577,9 +577,14 @@ printline(hname, msg)
 
 	q = line;
 
-	while ((c = *p++ & 0177) != '\0' &&
-	    q < &line[sizeof(line) - 1])
-		if (iscntrl(c))
+	while ((c = (unsigned char)*p++) != '\0' &&
+	    q < &line[sizeof(line) - 3]) {
+		if ((c & 0x80) && c < 0xA0) {
+			c &= 0x7F;
+			*q++ = 'M';
+			*q++ = '-';
+		}
+		if (isascii(c) && iscntrl(c)) {
 			if (c == '\n')
 				*q++ = ' ';
 			else if (c == '\t')
@@ -588,8 +593,9 @@ printline(hname, msg)
 				*q++ = '^';
 				*q++ = c ^ 0100;
 			}
-		else
+		} else
 			*q++ = c;
+	}
 	*q = '\0';
 
 	logmsg(pri, line, hname, 0);