diff --git a/clippy_lints/src/methods.rs b/clippy_lints/src/methods.rs
index c8f3e0db324..ae661f2106c 100644
--- a/clippy_lints/src/methods.rs
+++ b/clippy_lints/src/methods.rs
@@ -1899,11 +1899,8 @@ fn lint_chars_last_cmp_with_unwrap<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, info: &
 fn lint_single_char_pattern<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, _expr: &'tcx hir::Expr, arg: &'tcx hir::Expr) {
     if let Some((Constant::Str(r), _)) = constant(cx, cx.tables, arg) {
         if r.len() == 1 {
-            let c = r.chars().next().unwrap();
             let snip = snippet(cx, arg.span, "..");
-            let hint = snip.replace(
-                &format!("\"{}\"", c.escape_default()),
-                &format!("'{}'", c.escape_default()));
+            let hint = format!("'{}'", &snip[1..snip.len() - 1]);
             span_lint_and_sugg(
                 cx,
                 SINGLE_CHAR_PATTERN,
diff --git a/tests/ui/single_char_pattern.rs b/tests/ui/single_char_pattern.rs
index 73d00857415..577a0e27090 100644
--- a/tests/ui/single_char_pattern.rs
+++ b/tests/ui/single_char_pattern.rs
@@ -42,4 +42,5 @@ fn main() {
     h.contains("X"); // should not warn
 
     x.replace(";", ",").split(","); // issue #2978
+    x.starts_with("\x03"); // issue #2996
 }
diff --git a/tests/ui/single_char_pattern.stderr b/tests/ui/single_char_pattern.stderr
index 1e7e9cf78cf..044b4909a37 100644
--- a/tests/ui/single_char_pattern.stderr
+++ b/tests/ui/single_char_pattern.stderr
@@ -114,5 +114,11 @@ error: single-character string constant used as pattern
 44 |     x.replace(";", ",").split(","); // issue #2978
    |                               ^^^ help: try using a char instead: `','`
 
-error: aborting due to 19 previous errors
+error: single-character string constant used as pattern
+  --> $DIR/single_char_pattern.rs:45:19
+   |
+45 |     x.starts_with("/x03"); // issue #2996
+   |                   ^^^^^^ help: try using a char instead: `'/x03'`
+
+error: aborting due to 20 previous errors