Index: win/curses/curswins.c
===================================================================
--- win/curses/curswins.c	(revision 872)
+++ win/curses/curswins.c	(working copy)
@@ -584,11 +584,33 @@
 static void write_char(WINDOW *win, int x, int y, nethack_char nch)
 {
     curses_toggle_color_attr(win, nch.color, nch.attr, ON);
+
+    if (iflags.UTF8graphics) {
+       char cc[8] = { 0, };
+       if (nch.ch < 0x80) {
+           cc[0] = nch.ch;
+       } else if (nch.ch < 0x800) {
+           cc[0] = (0xC0 | (nch.ch>>6));
+           cc[1] = (0x80 | (nch.ch & 0x3F));
+       } else if (nch.ch < 0x10000) {
+           cc[0] = (0xE0 | (nch.ch>>12));
+           cc[1] = (0x80 | (nch.ch>>6 & 0x3F));
+           cc[2] = (0x80 | (nch.ch & 0x3F));
+       } else if (nch.ch < 0x200000) {
+           cc[0] = (0xF0 | (nch.ch>>18));
+           cc[1] = (0x80 | (nch.ch>>12 & 0x3F));
+           cc[2] = (0x80 | (nch.ch>>6 & 0x3F));
+           cc[3] = (0x80 | (nch.ch & 0x3F));
+       }
+
+       mvwaddstr(win, y, x, cc);
+    } else {
 #ifdef PDCURSES
-    mvwaddrawch(win, y, x, nch.ch);
+       mvwaddrawch(win, y, x, nch.ch);
 #else
-    mvwaddch(win, y, x, nch.ch);
+       mvwaddch(win, y, x, nch.ch);
 #endif
+    }
     curses_toggle_color_attr(win, nch.color, nch.attr, OFF);
 }
 
