生成一系列 多语言、多编码的测试文本文件,文件扩展名为 .txt
,用于测试 libmagic
、chardet
、cchardet
等工具对不同语种和编码的识别能力。
这些文件将覆盖:
- ✅ 主要语言:中文、日文、韩文、阿拉伯文、俄文、西欧文、UTF-16 等
- ✅ 常见编码:UTF-8、GBK、Big5、Shift_JIS、EUC-KR、ISO-8859-1、UTF-16LE/BE
- ✅ 文件命名规范:
<语言>_<编码>.txt
🛠️ 第一步:创建工作目录
mkdir ~/encoding-test
cd ~/encoding-test
🧪 第二步:生成各文种编码测试文件(.txt)
1. UTF-8(通用 Unicode)
cat > zh_utf8.txt << 'EOF'
中文测试:卫星状态正常
时间:2025-04-05T12:00:00Z
消息:系统在线,载荷激活
EOF
cat > ja_utf8.txt << 'EOF'
日本語テスト:衛星ステータス正常
時刻:2025-04-05T12:00:00Z
メッセージ:システム起動中
EOF
cat > ko_utf8.txt << 'EOF'
한국어 테스트: 위성 상태 정상
시간: 2025-04-05T12:00:00Z
메시지: 시스템 온라인
EOF
cat > ar_utf8.txt << 'EOF'
اختبار عربي: الحالة طبيعية
الوقت: 2025-04-05T12:00:00Z
الرسالة: النظام يعمل
EOF
cat > ru_utf8.txt << 'EOF'
Тест на русском: Состояние нормальное
Время: 2025-04-05T12:00:00Z
Сообщение: Система работает
EOF
cat > en_utf8.txt << 'EOF'
English Test: Status Nominal
Time: 2025-04-05T12:00:00Z
Message: System Online
EOF
cat > fr_utf8.txt << 'EOF'
Test français : État normal
Heure : 2025-04-05T12:00:00Z
Message : Système en ligne
EOF
2. GBK(简体中文)
# 从 UTF-8 转为 GBK
iconv -f UTF-8 -t GBK zh_utf8.txt -o zh_gbk.txt
3. Big5(繁体中文)
iconv -f UTF-8 -t BIG5 zh_utf8.txt -o zh_big5.txt
4. Shift_JIS(日文)
iconv -f UTF-8 -t SHIFT_JIS ja_utf8.txt -o ja_shift_jis.txt
5. EUC-KR(韩文)
iconv -f UTF-8 -t EUC-KR ko_utf8.txt -o ko_euc_kr.txt
6. ISO-8859-1(西欧,如法语、德语)
iconv -f UTF-8 -t ISO-8859-1 fr_utf8.txt -o fr_latin1.txt
7. UTF-16LE(小端 Unicode)
echo "UTF-16LE Test: 多语言混合" | iconv -t UTF-16LE -o mixed_utf16le.txt
8. UTF-16BE(大端 Unicode)
echo "UTF-16BE Test: Satellite Message" | iconv -t UTF-16BE -o en_utf16be.txt
9. ASCII(纯英文,无扩展字符)
cat > en_ascii.txt << 'EOF'
Satellite Telemetry Log
Status: Nominal
Time: 2025-04-05T12:00:00Z
EOF
10. UTF-8 with BOM(带签名)
# 手动生成带 BOM 的 UTF-8
printf '\xEF\xBB\xBF' > zh_utf8_bom.txt
cat zh_utf8.txt >> zh_utf8_bom.txt
✅ 第三步:验证文件生成成功
ls -l *.txt
你应该看到类似:
-rw-r--r-- 1 user user 123 Apr 5 12:00 zh_utf8.txt
-rw-r--r-- 1 user user 123 Apr 5 12:00 zh_gbk.txt
-rw-r--r-- 1 user user 123 Apr 5 12:00 zh_big5.txt
-rw-r--r-- 1 user user 123 Apr 5 12:00 ja_shift_jis.txt
-rw-r--r-- 1 user user 123 Apr 5 12:00 ko_euc_kr.txt
-rw-r--r-- 1 user user 123 Apr 5 12:00 fr_latin1.txt
-rw-r--r-- 1 user user 123 Apr 5 12:00 en_utf16le.txt
...
🔍 第四步:使用 file
命令识别类型
file *.txt
✅ 预期输出示例:
en_ascii.txt: ASCII text
en_utf8.txt: UTF-8 Unicode text
zh_gbk.txt: ISO-8859 text
zh_big5.txt: ISO-8859 text
ja_shift_jis.txt: ISO-8859 text
ko_euc_kr.txt: ISO-8859 text
fr_latin1.txt: ISO-8859 text
mixed_utf16le.txt: Little-endian UTF-16 Unicode text
en_utf16be.txt: Big-endian UTF-16 Unicode text
zh_utf8_bom.txt: UTF-8 Unicode (with BOM) text
⚠️ 注意:
zh_gbk.txt
被识别为ISO-8859 text
—— 这正是我们之前说的:libmagic
无法区分 GBK 和 Latin-1
🧪 第五步:使用 cchardet
精确识别编码
pip3 install cchardet
创建 detect_all.py
:
#!/usr/bin/env python3
import cchardet
import glob
for filepath in sorted(glob.glob("*.txt")):
with open(filepath, 'rb') as f:
raw = f.read()
result = cchardet.detect(raw)
encoding = result['encoding']
confidence = result['confidence']
print(f"{filepath:20} → {encoding:10} (置信度: {confidence:.2f})")
运行:
python3 detect_all.py
✅ 预期输出(示例):
en_ascii.txt → ascii (置信度: 1.00)
en_utf16be.txt → UTF-16BE (置信度: 1.00)
en_utf8.txt → UTF-8 (置信度: 1.00)
fr_latin1.txt → ISO-8859-1 (置信度: 1.00)
ja_shift_jis.txt → SHIFT_JIS (置信度: 0.99)
ko_euc_kr.txt → EUC-KR (置信度: 0.99)
zh_big5.txt → Big5 (置信度: 0.99)
zh_gbk.txt → GB2312 (置信度: 0.99)
zh_utf8_bom.txt → UTF-8 (置信度: 1.00)
zh_utf8.txt → UTF-8 (置信度: 1.00)
✅ 成功识别 GBK 为
GB2312
(GB2312 是 GBK 的子集,可接受)
✅ 总结:各文种编码测试文件清单
语言 | 编码 | 文件名 |
---|---|---|
中文(简体) | UTF-8 | zh_utf8.txt |
中文(简体) | GBK | zh_gbk.txt |
中文(繁体) | Big5 | zh_big5.txt |
日文 | Shift_JIS | ja_shift_jis.txt |
韩文 | EUC-KR | ko_euc_kr.txt |
俄文 | UTF-8 | ru_utf8.txt |
阿拉伯文 | UTF-8 | ar_utf8.txt |
法文 | ISO-8859-1 | fr_latin1.txt |
英文 | ASCII | en_ascii.txt |
英文 | UTF-16LE | en_utf16le.txt |
英文 | UTF-16BE | en_utf16be.txt |
中文 | UTF-8 with BOM | zh_utf8_bom.txt |
🛰️ 在卫星通信中的应用
你可以用这些文件:
- 测试地面站软件的编码自动识别能力
- 训练
chardet
模型(可选) - 构建“多语言遥测解析引擎”
- 自动化处理来自不同国家卫星的数据