🟡 [M2] Unicode 显示宽度全部视为 1,CJK/emoji 包裹位置错误 #12
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
文件:
core/io/wrap.rs:17-28分类: 渲染 / Unicode
问题: 包裹逻辑将每个非 Tab Unicode 标量视为显示宽度 1。CJK 字符、emoji、组合标记、零宽字符的宽度都被错误计算。
建议修复: 使用
unicode-widthcrate (UnicodeWidthChar/UnicodeWidthStr) 处理宽字符和零宽字符。修复已合并:
b58d66f变更内容
crates/core/src/io/wrap.rs:wrap_line_chars中将硬编码width=1替换为unicode-widthcrate 的UnicodeWidthChar::width(),正确处理 CJK (width=2)、emoji (width=2)、零宽字符 (width=0) 和控制字符 (width=0)。Cargo.toml+crates/core/Cargo.toml: 添加unicode-width = "0.2"直接依赖。已知限制(超出本 Issue scope)