Index: twisted/words/test/test_irc_service.py
===================================================================
--- twisted/words/test/test_irc_service.py	(revision 34773)
+++ twisted/words/test/test_irc_service.py	(working copy)
@@ -41,7 +41,25 @@
         self.assertEqual(":example.com foo mynick\r\n",
                           self.stringTransport.value())
 
+    def test_utf8Messages(self):
+        """
+        Set utf-8 nick and try to send utf-8 message
+        """
+        self.ircUser.irc_NICK("", ["\xd0\xbd\xd0\xb8\xd0\xba"])
+        self.stringTransport.clear()
+        self.ircUser.sendMessage("\xd1\x82\xd0\xb5\xd1\x81\xd1\x82")
+        self.assertEqual(
+            ":example.com \xd1\x82\xd0\xb5\xd1\x81\xd1\x82 \xd0\xbd\xd0\xb8\xd0\xba\r\n",
+            self.stringTransport.value())
 
+    def test_wrongUtf8Nick(self):
+        """
+        Send message in non-utf8 encoding
+        """
+        self.ircUser.irc_NICK("", ["\xd4\xc5\xd3\xd4"])
+        self.assertEqual(':NickServ!NickServ@services PRIVMSG \xd4\xc5\xd3\xd4 :Your nickname is cannot be decoded.  Please use ASCII or UTF-8.\r\n',
+                         self.stringTransport.value())
+
     def response(self):
         """
         Grabs our responses and then clears the transport
Index: twisted/words/service.py
===================================================================
--- twisted/words/service.py	(revision 34773)
+++ twisted/words/service.py	(working copy)
@@ -290,7 +290,8 @@
         [REQUIRED]
         """
         try:
-            nickname = params[0].decode(self.encoding)
+            nickname = params[0]
+            nickname = nickname.decode(self.encoding)
         except UnicodeDecodeError:
             self.privmsg(
                 NICKSERV,
