diff --git a/src/terminal-screen.c b/src/terminal-screen.c
index db2d7d7..ad41acc 100644
--- a/src/terminal-screen.c
+++ b/src/terminal-screen.c
@@ -156,7 +156,8 @@ static void update_color_scheme                      (TerminalScreen *screen);
 static void terminal_screen_check_extra (TerminalScreen *screen,
                                          GdkEvent       *event,
                                          char           **number_info,
-                                         char           **timestamp_info);
+                                         char           **timestamp_info,
+                                         char           **character_info);
 static char* terminal_screen_check_match       (TerminalScreen            *screen,
                                                 GdkEvent                  *event,
                                                 int                  *flavor);
@@ -183,6 +184,7 @@ static const TerminalRegexPattern url_regex_patterns[] = {
 
 static const TerminalRegexPattern extra_regex_patterns[] = {
   { "(0[Xx][[:xdigit:]]+|[[:digit:]]+)", FLAVOR_NUMBER },
+  { ".", FLAVOR_CHARACTER },
 };
 
 #ifdef WITH_PCRE2
@@ -1464,6 +1466,7 @@ terminal_screen_popup_info_unref (TerminalScreenPopupInfo *info)
   g_free (info->url);
   g_free (info->number_info);
   g_free (info->timestamp_info);
+  g_free (info->character_info);
   g_slice_free (TerminalScreenPopupInfo, info);
 }
 
@@ -1503,7 +1506,8 @@ terminal_screen_do_popup (TerminalScreen *screen,
                           char *url,
                           int url_flavor,
                           char *number_info,
-                          char *timestamp_info)
+                          char *timestamp_info,
+                          char *character_info)
 {
   TerminalScreenPopupInfo *info;
 
@@ -1515,6 +1519,7 @@ terminal_screen_do_popup (TerminalScreen *screen,
   info->url_flavor = url_flavor;
   info->number_info = number_info; /* adopted */
   info->timestamp_info = timestamp_info; /* adopted */
+  info->character_info = character_info; /* adopted */
 
   g_signal_emit (screen, signals[SHOW_POPUP_MENU], 0, info);
   terminal_screen_popup_info_unref (info);
@@ -1531,12 +1536,13 @@ terminal_screen_button_press (GtkWidget      *widget,
   int url_flavor = 0;
   gs_free char *number_info = NULL;
   gs_free char *timestamp_info = NULL;
+  gs_free char *character_info = NULL;
   guint state;
 
   state = event->state & gtk_accelerator_get_default_mod_mask ();
 
   url = terminal_screen_check_match (screen, (GdkEvent*)event, &url_flavor);
-  terminal_screen_check_extra (screen, (GdkEvent*)event, &number_info, &timestamp_info);
+  terminal_screen_check_extra (screen, (GdkEvent*)event, &number_info, &timestamp_info, &character_info);
 
   if (url != NULL &&
       (event->button == 1 || event->button == 2) &&
@@ -1562,19 +1568,21 @@ terminal_screen_button_press (GtkWidget      *widget,
           if (button_press_event && button_press_event (widget, event))
             return TRUE;
 
-          terminal_screen_do_popup (screen, event, url, url_flavor, number_info, timestamp_info);
+          terminal_screen_do_popup (screen, event, url, url_flavor, number_info, timestamp_info, character_info);
           url = NULL; /* adopted to the popup info */
           number_info = NULL; /* detto */
           timestamp_info = NULL; /* detto */
+          character_info = NULL; /* detto */
           return TRUE;
         }
       else if (!(event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)))
         {
           /* do popup on shift+right-click */
-          terminal_screen_do_popup (screen, event, url, url_flavor, number_info, timestamp_info);
+          terminal_screen_do_popup (screen, event, url, url_flavor, number_info, timestamp_info, character_info);
           url = NULL; /* adopted to the popup info */
           number_info = NULL; /* detto */
           timestamp_info = NULL; /* detto */
+          character_info = NULL; /* detto */
           return TRUE;
         }
     }
@@ -1941,11 +1949,13 @@ static void
 terminal_screen_check_extra (TerminalScreen *screen,
                              GdkEvent       *event,
                              char           **number_info,
-                             char           **timestamp_info)
+                             char           **timestamp_info,
+                             char           **character_info)
 {
   guint i;
   char **matches;
   gboolean flavor_number_found = FALSE;
+  gboolean flavor_character_found = FALSE;
 
   matches = g_newa (char *, n_extra_regexes);
 
@@ -1978,6 +1988,14 @@ terminal_screen_check_extra (TerminalScreen *screen,
                     }
                   g_free (matches[i]);
                   break;
+                case FLAVOR_CHARACTER:
+                  if (!flavor_character_found)
+                    {
+                      *character_info = terminal_util_character_info (matches[i]);
+                      flavor_character_found = TRUE;
+                    }
+                  g_free (matches[i]);
+                  break;
                 default:
                   g_free (matches[i]);
                 }
diff --git a/src/terminal-screen.h b/src/terminal-screen.h
index a4738ac..8365af0 100644
--- a/src/terminal-screen.h
+++ b/src/terminal-screen.h
@@ -32,6 +32,7 @@ typedef enum {
   FLAVOR_VOIP_CALL,
   FLAVOR_EMAIL,
   FLAVOR_NUMBER,
+  FLAVOR_CHARACTER,
 } TerminalURLFlavor;
 
 /* Forward decls */
@@ -142,6 +143,7 @@ struct _TerminalScreenPopupInfo {
   TerminalURLFlavor url_flavor;
   char *number_info;
   char *timestamp_info;
+  char *character_info;
   guint button;
   guint state;
   guint32 timestamp;
diff --git a/src/terminal-util.c b/src/terminal-util.c
index 8b29a26..0e56878 100644
--- a/src/terminal-util.c
+++ b/src/terminal-util.c
@@ -1106,3 +1106,22 @@ terminal_util_timestamp_info (const char *str)
 
   return res;
 }
+
+/**
+ * terminal_util_character_info:
+ * @str: a single UTF-8 character as string
+ *
+ * Returns: (transfer full): Info about the character, or %NULL
+ */
+char *
+terminal_util_character_info (const char *str)
+{
+  gunichar c = g_utf8_get_char(str);
+
+  if (c >= 0x80)
+    {
+      return g_strdup_printf ("%s = U+%04X", str, c);
+    }
+
+  return NULL;
+}
diff --git a/src/terminal-util.h b/src/terminal-util.h
index c6c275e..a6e258b 100644
--- a/src/terminal-util.h
+++ b/src/terminal-util.h
@@ -91,6 +91,7 @@ void terminal_util_bind_mnemonic_label_sensitivity (GtkWidget *widget);
 
 char *terminal_util_number_info (const char *str);
 char *terminal_util_timestamp_info (const char *str);
+char *terminal_util_character_info (const char *str);
 
 G_END_DECLS
 
diff --git a/src/terminal-window.c b/src/terminal-window.c
index e9a7a19..7b426a4 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -2094,7 +2094,7 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard,
   TerminalScreen *screen = info->screen;
   GtkWidget *popup_menu;
   GtkAction *action;
-  gboolean can_paste, can_paste_uris, show_link, show_email_link, show_call_link, show_number_info, show_timestamp_info;
+  gboolean can_paste, can_paste_uris, show_link, show_email_link, show_call_link, show_number_info, show_timestamp_info, show_character_info;
 
   window = terminal_screen_popup_info_ref_window (info);
   if (window == NULL ||
@@ -2117,6 +2117,7 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard,
   show_call_link = info->url != NULL && info->url_flavor == FLAVOR_VOIP_CALL;
   show_number_info = info->number_info != NULL;
   show_timestamp_info = info->timestamp_info != NULL;
+  show_character_info = info->character_info != NULL;
 
   action = gtk_action_group_get_action (priv->action_group, "PopupSendEmail");
   gtk_action_set_visible (action, show_email_link);
@@ -2138,6 +2139,10 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard,
   gtk_action_set_label (action, info->timestamp_info);
   gtk_action_set_sensitive (action, FALSE);
   gtk_action_set_visible (action, show_timestamp_info);
+  action = gtk_action_group_get_action (priv->action_group, "PopupCharacterInfo");
+  gtk_action_set_label (action, info->character_info);
+  gtk_action_set_sensitive (action, FALSE);
+  gtk_action_set_visible (action, show_character_info);
 
   action = gtk_action_group_get_action (priv->action_group, "PopupCopy");
   gtk_action_set_sensitive (action, vte_terminal_get_has_selection (VTE_TERMINAL (screen)));
@@ -2677,6 +2682,9 @@ terminal_window_init (TerminalWindow *window)
       { "PopupTimestampInfo", NULL, "", NULL,
         NULL,
         NULL },
+      { "PopupCharacterInfo", NULL, "", NULL,
+        NULL,
+        NULL },
       { "PopupTerminalProfiles", NULL, N_("P_rofiles") },
       { "PopupCopy", "edit-copy", N_("Copy"), "",
         NULL,
diff --git a/src/terminal.xml b/src/terminal.xml
index 2d3cd62..6dd89e2 100644
--- a/src/terminal.xml
+++ b/src/terminal.xml
@@ -84,6 +84,7 @@
     <menuitem action="PopupCopyLinkAddress" />
     <menuitem action="PopupNumberInfo" />
     <menuitem action="PopupTimestampInfo" />
+    <menuitem action="PopupCharacterInfo" />
     <separator />
     <menuitem action="PopupNewTerminal" />
     <separator />
