Panic when truncating Korean (UTF-8 multibyte) strings

Status Closed — duplicate
Maintainer reply None cached
Activity 3 comments · opened Feb 5, 2026 · closed Feb 8, 2026

Bug Description

Claude Code CLI panics when handling strings containing Korean characters. The error occurs because the code attempts to slice a UTF-8 string at a byte index that falls in the middle of a multibyte character.

Error Message

thread '<unnamed>' panicked at /rustc/ed61e7d7e242494fb7057f2657300d9e77bb4fcb\library\core\src\str\mod.rs:833:21:
byte index 8 is not a char boundary; it is inside '트' (bytes 6..9) of `이언트 (OC=kazzang)`
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Root Cause

  • Korean characters use 3 bytes in UTF-8 encoding
  • The character '트' occupies bytes 6-9
  • The code tries to slice at byte index 8, which is in the middle of '트'
  • Rust panics because slicing at non-char boundaries is not allowed

Environment

  • OS: Windows 11
  • Claude Code CLI version: latest
  • Locale: Korean

Frequency

This issue occurs frequently during normal usage, especially when:

  • Working with Korean filenames
  • Working in directories with Korean paths
  • Processing Korean text content

Expected Behavior

The CLI should properly handle UTF-8 multibyte characters by using character boundaries instead of byte indices when truncating strings.

Suggested Fix

Use char_indices() or similar UTF-8 aware methods when truncating strings:

// Instead of: &s[..8]
// Use something like:
fn safe_truncate(s: &str, max_chars: usize) -> &str {
    match s.char_indices().nth(max_chars) {
        Some((idx, _)) => &s[..idx],
        None => s,
    }
}

Or use the unicode-segmentation crate for proper grapheme cluster handling.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗