X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=lib%2Fmudpy%2Fmisc.py;h=8f6630f8b05e83a28329dd316336d2093b851462;hp=3193e111d159a07c62db50e0aff8778eb3d2aadc;hb=761af6ff61bb547f76c761acbe41d0ef11d51681;hpb=3bb52cb5100b52500ca7368b979d501bdb83fd32 diff --git a/lib/mudpy/misc.py b/lib/mudpy/misc.py index 3193e11..8f6630f 100644 --- a/lib/mudpy/misc.py +++ b/lib/mudpy/misc.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Miscellaneous functions for the mudpy engine.""" -# Copyright (c) 2004-2012 Jeremy Stanley . Permission +# Copyright (c) 2004-2013 Jeremy Stanley . Permission # to use, copy, modify, and distribute this software is granted under # terms provided in the LICENSE file distributed with this software. @@ -589,7 +589,7 @@ class User: self.menu_seen = False self.negotiation_pause = 0 self.output_queue = [] - self.partial_input = "" + self.partial_input = b"" self.password_tries = 0 self.state = "initial" self.telopts = {} @@ -924,7 +924,7 @@ class User: try: raw_input = self.connection.recv(1024) except: - raw_input = "" + raw_input = b"" # we got something if raw_input: @@ -936,18 +936,18 @@ class User: mudpy.telnet.negotiate_telnet_options(self) # separate multiple input lines - new_input_lines = self.partial_input.split("\n") + new_input_lines = self.partial_input.split(b"\n") # if input doesn't end in a newline, replace the # held partial input with the last line of it - if not self.partial_input.endswith("\n"): + if not self.partial_input.endswith(b"\n"): self.partial_input = new_input_lines.pop() # otherwise, chop off the extra null input and reset # the held partial input else: new_input_lines.pop() - self.partial_input = "" + self.partial_input = b"" # iterate over the remaining lines for line in new_input_lines: @@ -958,8 +958,8 @@ class User: # log non-printable characters remaining if mudpy.telnet.is_enabled(self, mudpy.telnet.TELOPT_BINARY, mudpy.telnet.HIM): - asciiline = "".join( - filter(lambda x: " " <= x <= "~", line)) + asciiline = b"".join( + filter(lambda x: b" " <= x <= b"~", line)) if line != asciiline: logline = "Non-ASCII characters from " if self.account and self.account.get("name"): @@ -970,10 +970,22 @@ class User: log(logline, 4) line = asciiline + try: + line = line.decode("utf-8") + except UnicodeDecodeError: + logline = "Non-UTF-8 characters from " + if self.account and self.account.get("name"): + logline += self.account.get("name") + ": " + else: + logline += "unknown user: " + logline += repr(line) + log(logline, 4) + return + + line = unicodedata.normalize("NFKC", line) + # put on the end of the queue - self.input_queue.append( - unicodedata.normalize("NFKC", line.decode("utf-8")) - ) + self.input_queue.append(line) def new_avatar(self): """Instantiate a new, unconfigured avatar for this user."""