UTF-8 Character Boundary Panic When Editing Chinese Text

Resolved 💬 4 comments Opened Jan 12, 2026 by chong-zi Closed Feb 26, 2026

Claude Code UTF-8 字符边界 Panic 错误

问题描述

在使用 Claude Code 编辑包含中文内容的文档时,程序发生 fatal runtime error 并崩溃。

环境信息

  • 操作系统: macOS (Darwin 25.2.0)
  • Claude Code 版本: 2.1.5
  • 命令: ccs -c
  • 工作目录: /Users/long/软件开发/workspace/claude/助手解决方案文档
  • 文件: AI助手技术规范书_V0.md

重现步骤

  1. 在包含中文内容的 Markdown 文档中工作
  2. 运行 ccs -c 命令
  3. 执行文档编辑操作
  4. 程序崩溃并显示 panic 错误

错误信息

thread '<unnamed>' (1385215) panicked at /rustc/ed61e7d7e242494fb7057f2657300d9e77bb4fcb/library/core/src/str/mod.rs:833:21:
byte index 28 is not a char boundary; it is inside '.' ' (bytes 27..30) of `优化改进的最佳时机。传统BI系统需要专业人员操作,普通管理者难以自主完成复杂分析,导致分析需求响应慢、沟通成本高`

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
fatal runtime error: failed to initiate panic, error 5, aborting

问题分析

这是一个典型的 UTF-8 字符边界错误。程序尝试在字节索引 28 处分割字符串,但该位置位于一个多字节 UTF-8 字符(中文字符)的内部(bytes 27..30),而不是在字符边界上。

中文字符通常占用 3 个字节,程序的字符串处理逻辑没有正确处理多字节字符,导致在字符中间进行索引操作。

预期行为

程序应该能够正确处理包含多字节 UTF-8 字符(中文、日文、韩文、表情符号等)的文本,在字符边界上进行字符串操作。

实际行为

程序在处理中文文本时发生 panic 并崩溃,无法继续工作。

影响范围

此问题影响所有使用非 ASCII 多字节字符的用户,包括但不限于:

  • 中文用户
  • 日文用户
  • 韩文用户
  • 使用表情符号的用户

建议修复

在进行字符串索引操作时,应该:

  1. 使用 .char_indices() 而不是直接的字节索引
  2. 使用 .chars() 迭代器处理字符
  3. 在需要截取字符串时,确保在字符边界上操作
  4. 添加针对多字节字符的测试用例

附加信息

PreToolUse hook 输出:

PreToolUse:Edit: jq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt

操作上下文:正在执行文档编辑任务,向第 6.1 节添加内容。

View original on GitHub ↗

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