unicode-safe-file-writing
How to reliably write files containing multi-byte Unicode (emoji, special symbols) when write_file fails with 'unknown error' by falling back to run_shell with a heredoc.
- License 许可
- MIT
- 最近更新
- 2026-04-16
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- unicode-safe-file-writing
- description
- How to reliably write files containing multi-byte Unicode (emoji, special symbols) when write_file fails with 'unknown error' by falling back to run_shell with a heredoc.
02 资源文件 1
- 其他.skill_id39 B
03 SKILL.md 正文
Unicode-Safe File Writing
Problem
The write_file tool may fail with 'unknown error' when the file content
contains multi-byte Unicode characters such as:
- Emoji (e.g.
?,✅,❌) - Special typographic symbols (e.g.
→,•,—,©) - Non-ASCII characters outside the Latin-1 range
This is a known encoding limitation of write_file.
Solution
Fall back to run_shell and write the file using a shell heredoc
(cat > file << 'EOF' ... EOF). The single-quoted delimiter 'EOF'
prevents the shell from interpreting any special characters inside the
block.
Step-by-Step Recovery
Step 1 — Detect the failure
If write_file returns an error such as:
Error: unknown error
and the content contains non-ASCII characters, assume a Unicode encoding issue and proceed to the heredoc fallback.
Step 2 — Strip or replace problematic characters (if needed)
Before embedding content in the heredoc, decide whether to:
- Keep the characters as-is (works if the shell/terminal is UTF-8 aware)
- Replace emoji/symbols with ASCII equivalents (safest, most portable)
- Remove them entirely
Common replacements:
| Original | Replacement |
|---|---|
✅ |
[OK] |
❌ |
[ERROR] |
? |
[START] |
→ |
-> |
• |
- |
— |
-- |
Step 3 — Write the file via heredoc
Use run_shell with the following pattern:
cat > path/to/file.ext << 'EOF'
...file content here (with Unicode stripped/replaced if needed)...
EOF
Key details:
- Use
'EOF'(single-quoted) as the heredoc delimiter — this disables all shell variable expansion and special character interpretation inside the block. - Do not indent the closing
EOF(it must start at column 0). - For deeply nested content, choose a delimiter that cannot appear in the
content itself (e.g.
'HEREDOC_END','FILEEND').
Example
Failing call
write_file(
path="src/components/StatusPanel.ts",
content="// Status icons\nconst icons = { ok: '✅', err: '❌', run: '?' };\n"
)
# → Error: unknown error
Recovery via heredoc
cat > src/components/StatusPanel.ts << 'EOF'
// Status icons
const icons = { ok: '[OK]', err: '[ERROR]', run: '[START]' };
EOF
Or, if UTF-8 output is acceptable in the environment:
cat > src/components/StatusPanel.ts << 'EOF'
// Status icons
const icons = { ok: '✅', err: '❌', run: '?' };
EOF
Multi-File Scenario
When writing several files and one fails, write the others with write_file
as normal and apply the heredoc fallback only to the failing file(s):
# Write multiple files that contain Unicode
cat > src/utils/icons.ts << 'EOF'
export const ICONS = {
success: '[OK]',
failure: '[FAIL]',
pending: '[...]',
};
EOF
cat > src/utils/labels.ts << 'EOF'
export const LABELS = {
title: 'Dashboard',
subtitle: 'Real-time status',
};
EOF
Important Notes
- Always prefer
write_filefirst — only fall back to the heredoc approach whenwrite_filefails. - Verify after writing — use
run_shellwithcat path/to/fileorhead -5 path/to/fileto confirm the content was written correctly. - Directory creation —
write_fileauto-creates parent directories; the heredoc approach does not. Pre-create directories withmkdir -p path/to/dirif needed. - Large files — heredocs work well for files of any practical size; there is no meaningful shell limit.
- Escaping backslashes — inside a single-quoted heredoc, backslashes are treated literally (no escaping needed), which is usually desirable.
04 同仓库更多 Skills
write-special-chars-ts-check
Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, plus a reliable TypeScript type-checking step that filters output to only the newly-written files to avoid being misled by pre-existing errors.
write-special-chars-readback
Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of /tmp helper scripts.
write-special-chars-heredoc
Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) by using a Python heredoc script executed via shell.
worldmonitor-reference
Curated architecture index of the WorldMonitor open-source dashboard. Reference for extracting patterns — vanilla TypeScript, Panel class hierarchy, service layer, CSS grid, API edge functions, refresh scheduler, and 60+ data source integrations.
virtual-list
Implement efficient virtual scrolling for rendering large lists with DOM recycling, chunk-based rendering, and performance optimizations
verify-directory-structure
Diagnose and resolve file access issues by first verifying the directory structure.