本文目录导读:

这里提供几种常用的文本编码转换方法,涵盖不同场景:
Python 脚本(最灵活)
# 文件名: convert_encoding.py
import os
import sys
def convert_file(input_file, output_file, from_encoding='gbk', to_encoding='utf-8'):
"""转换单个文件编码"""
try:
# 读取原始文件
with open(input_file, 'r', encoding=from_encoding) as f:
content = f.read()
# 写入新编码文件
with open(output_file, 'w', encoding=to_encoding) as f:
f.write(content)
print(f"✓ 转换成功: {input_file} -> {output_file}")
return True
except Exception as e:
print(f"✗ 转换失败: {e}")
return False
def batch_convert(directory, from_encoding='gbk', to_encoding='utf-8', extensions=None):
"""批量转换目录下的文件"""
if extensions is None:
extensions = ['.txt', '.log', '.csv', '.xml', '.html']
converted = 0
failed = 0
for root, dirs, files in os.walk(directory):
for file in files:
if any(file.endswith(ext) for ext in extensions):
file_path = os.path.join(root, file)
output_path = file_path + '.utf8'
if convert_file(file_path, output_path, from_encoding, to_encoding):
converted += 1
else:
failed += 1
print(f"\n完成: {converted} 个文件转换成功, {failed} 个文件失败")
# 使用方法
if __name__ == "__main__":
# 单文件转换
convert_file('input.txt', 'output.txt', 'gbk', 'utf-8')
# 批量转换
# batch_convert('./folder', 'gbk', 'utf-8')
Bash 脚本(Linux/Mac)
#!/bin/bash
# 文件名: convert.sh
# 单个文件转换
convert_single() {
INPUT_FILE=$1
OUTPUT_FILE=$2
FROM_ENCODING=$3
TO_ENCODING=$4
iconv -f $FROM_ENCODING -t $TO_ENCODING $INPUT_FILE > $OUTPUT_FILE
echo "✓ 转换完成: $INPUT_FILE -> $OUTPUT_FILE"
}
# 批量转换目录下所有文件
batch_convert() {
DIRECTORY=$1
FROM_ENCODING=$2
TO_ENCODING=$3
# 创建输出目录
mkdir -p "$DIRECTORY/converted"
for file in "$DIRECTORY"/*.{txt,log,csv,xml,html}; do
if [ -f "$file" ]; then
filename=$(basename "$file")
iconv -f "$FROM_ENCODING" -t "$TO_ENCODING" "$file" > "$DIRECTORY/converted/$filename"
echo "✓ 转换: $filename"
fi
done
echo "批量转换完成!"
}
# 使用示例
convert_single input.txt output.txt gbk utf-8
# batch_convert ./files gbk utf-8
命令行工具(简单方式)
Windows (PowerShell)
# 需要安装 .NET 环境
# 转换单个文件
Get-Content input.txt -Encoding Default | Set-Content output.txt -Encoding UTF8
# 批量转换所有 .txt 文件
Get-ChildItem *.txt | ForEach-Object {
$content = Get-Content $_.FullName -Encoding Default
Set-Content "$($_.BaseName)_utf8.txt" -Value $content -Encoding UTF8
}
Linux/Mac 使用 iconv
# 单个文件
iconv -f gbk -t utf-8 input.txt > output.txt
# 批量转换
for file in *.txt; do
iconv -f gbk -t utf-8 "$file" > "${file%.txt}_utf8.txt"
done
# 查看支持的所有编码
iconv -l
智能编码检测脚本(Python)
# 自动检测并转换编码
import chardet
def smart_convert(input_file, output_file):
"""自动检测编码并转换为 UTF-8"""
# 读取文件二进制内容
with open(input_file, 'rb') as f:
raw_data = f.read()
# 检测编码
result = chardet.detect(raw_data)
encoding = result['encoding']
confidence = result['confidence']
print(f"检测到编码: {encoding} (置信度: {confidence:.2%})")
# 解码并重新编码为 UTF-8
try:
text = raw_data.decode(encoding)
with open(output_file, 'w', encoding='utf-8') as f:
f.write(text)
print(f"✓ 转换成功: {input_file} -> {output_file}")
return True
except Exception as e:
print(f"✗ 转换失败: {e}")
return False
# 使用
smart_convert('input.txt', 'output_utf8.txt')
快速使用建议
安装依赖(Python)
pip install chardet # 用于编码检测
最常用的场景示例
场景1:GBK转UTF-8
# 简单方式 iconv -f gbk -t utf8 input.txt > output.txt # Python方式 python convert_encoding.py
场景2:批量转换
# 使用上面的 batch_convert 函数
batch_convert('./my_folder/', 'gbk', 'utf-8', ['.txt', '.csv'])
场景3:自动检测编码
# 先安装 chardet python smart_convert.py your_file.txt converted_file.txt
注意事项
- 备份文件:转换前建议备份原文件
- 编码问题:如果没有正确指定源编码,可能产生乱码
- BOM处理:UTF-8 可能带 BOM(如需要可添加
utf-8-sig) - 大文件:处理大文件时考虑内存使用
选择哪种方法取决于你的操作系统、文件格式和使用场景。