Skills DirectorySearch all skills ↗

AI agent skill · by @cropflre

Encoding Guard

Prevent garbled text (乱码) when editing code and comments. Use this skill whenever reading, writing, or modifying files to ensure proper UTF-8 encoding handling. Activates on any file edit operation, especially when working with Chinese characters, emoji, or non-ASCII content.

Archived 2026-10-23 · Source updated 2026-10-11 · License: GPL-3.0. Check the original repository for the latest version.

SKILL.md instructions

# Encoding Guard

Ensures all file operations use proper UTF-8 encoding to prevent garbled text (乱码).

## Core Principles

1. **Always use UTF-8** — Read and write files with explicit UTF-8 encoding
2. **Validate before write** — Check that content is valid UTF-8 before saving
3. **Preserve BOM awareness** — Detect and handle BOM (Byte Order Mark) when present
4. **Handle mixed encoding** — Convert legacy encodings (GBK, GB2312, Big5) to UTF-8

## When Reading Files

```bash
# Always specify encoding when reading
cat -n file.tsx  # Use Read tool which handles encoding

# If you suspect encoding issues, check with:
file -I file.tsx  # Shows charset
hexdump -C file.tsx | head -5  # Inspect raw bytes
```

## When Writing Files

```bash
# Ensure locale supports UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

# When using Edit tool, the content is already validated
# When using Write tool, ensure content is proper UTF-8
```

## Detection Patterns

Watch for these signs of encoding problems:

1. **Mojibake characters**: `é`, `è`, `ü` (UTF-8 read as Latin-1)
2. **Chinese garbled**: `锟斤拷`, `烫烫烫`, `屯屯屯` (GBK/UTF-8 mismatch)
3. **Replacement character**: `�` (U+FFFD) — missing or invalid bytes
4. **Question marks**: `???` where Chinese should be

## Fix Strategies

### Strategy 1: Re-read with correct encoding

If a file shows garbled text:

```bash
# Check current encoding
file -I problematic.tsx

# If it's GBK, convert to UTF-8
iconv -f GBK -t UTF-8 problematic.tsx > fixed.tsx
mv fixed.tsx problematic.tsx
```

### Strategy 2: Use Read tool with encoding awareness

The Read tool automatically handles encoding. If you see garbled output:

1. Stop and check the file's actual encoding
2. Convert if needed before editing
3. Then proceed with normal Read/Edit operations

### Strategy 3: Validate after write

After any Edit or Write operation:

```bash
# Quick validation
python3 -c "
with open('file.tsx', 'r', encoding='utf-8') as f:
    content = f.read()
    print(f'Valid UTF-8: {len(content)} chars')
"
```

## Common Scenarios

### Scenario 1: Editing TypeScript/JSX with Chinese comments

```typescript
// ✅ Correct: UTF-8 encoded comment
// 这是一个中文注释

// ❌ Wrong: Encoding mismatch causes garbled
// 杩欐槸涓€涓�腑鏂囨敞閲�
```

**Action**: Always use UTF-8 locale. Set in shell:
```bash
export LANG=en_US.UTF-8
```

### Scenario 2: Mixed encoding in project

If some files are GBK and others UTF-8:

```bash
# Find all non-UTF-8 files
find . -name "*.tsx" -exec file -I {} \; | grep -v utf-8

# Batch convert
for f in $(find . -name "*.tsx" -exec file -I {} \; | grep gb2312 | cut -d: -f1); do
    iconv -f GBK -t UTF-8 "$f" > "$f.utf8"
    mv "$f.utf8" "$f"
done
```

### Scenario 3: Git shows encoding warnings

```bash
# Configure git to handle encoding
git config core.quotepath false  # Show Chinese filenames correctly
git config i18n.commitencoding utf-8
git config i18n.logoutputencoding utf-8
```

## Prevention Checklist

Before any file operation:

- [ ] Locale is set to UTF-8 (`echo $LANG` should show `*.UTF-8`)
- [ ] File encoding is verified (`file -I filename`)
- [ ] Content being written is valid UTF-8
- [ ] Editor/IDE is configured for UTF-8

## Quick Diagnostic

Run this to check your environment:

```bash
echo "Locale: $LANG"
echo "LC_ALL: $LC_ALL"
python3 -c "import sys; print(f'Default encoding: {sys.getdefaultencoding()}')"
python3 -c "import locale; print(f'Preferred encoding: {locale.getpreferredencoding()}')"
```

Expected output:
```
Locale: en_US.UTF-8
LC_ALL: en_US.UTF-8
Default encoding: utf-8
Preferred encoding: UTF-8
```

## Integration with Tools

### Read Tool
- Automatically detects and handles encoding
- If garbled, the file may need conversion first

### Edit Tool
- Content parameter must be valid UTF-8
- Tool validates encoding before applying changes

### Write Tool
- Content parameter must be valid UTF-8
- Overwrites file with UTF-8 encoding

### Bash Tool
- Set locale before commands: `LANG=en_US.UTF-8 command`
- Pipe through `iconv` if needed: `command | iconv -f GBK -t UTF-8`

Related skills