diff --git a/src/nano.c b/src/nano.c
index 317f7d154a6a36d388e1e01ce8e24bac94ea7038..abdd4252f200b7d0e9ff068ed0f6d81f12c7e548 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -3600,7 +3600,7 @@ void do_output(int *kbinput, size_t kbinput_len)
 	/* Change the wide character to its multibyte value.  If it's
 	 * invalid, go on to the next character. */
 	if (!ISSET(NO_UTF8)) {
-	    key_len = wctomb(key, kbinput[i]);
+	    key_len = wctomb(key, (wchar_t)kbinput[i]);
 
 	    if (key_len == -1)
 		continue;
diff --git a/src/winio.c b/src/winio.c
index fbc0a3f05f72ed7566715e52bc493099a1fd429b..2471f7a613992f8f4dc7218058e59270c706e47f 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -205,7 +205,7 @@ void get_buffer(WINDOW *win)
 			clean_key_buffer_len * sizeof(buffer));
 
 		clean_key_buffer[clean_key_buffer_len - 1].key =
-			wide_key;
+			(int)wide_key;
 		clean_key_buffer[clean_key_buffer_len - 1].key_code =
 			key_buffer[i].key_code;
 	    }
@@ -263,7 +263,7 @@ void unget_input(buffer *input, size_t input_len)
 	for (i = 0; i < input_len; i++) {
 	    char key[MB_LEN_MAX];
 	    int key_len = input[i].key_code ? 1 :
-		wctomb(key, input[i].key);
+		wctomb(key, (wchar_t)input[i].key);
 
 	    if (key_len != -1) {
 		clean_input_len++;