怎么用脚本转换文本编码

wen 实用脚本 1

本文目录导读:

怎么用脚本转换文本编码

  1. Python 脚本(最灵活)
  2. Bash 脚本(Linux/Mac)
  3. 命令行工具(简单方式)
  4. 智能编码检测脚本(Python)
  5. 快速使用建议
  6. 注意事项

这里提供几种常用的文本编码转换方法,涵盖不同场景:

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
  • 大文件:处理大文件时考虑内存使用

选择哪种方法取决于你的操作系统、文件格式和使用场景。

抱歉,评论功能暂时关闭!