You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cv2转换PDF为PNG时如何将文件名德语变音字符äöü替换为ae、oe、ue

德语变音字符文件名乱码解决方案

核心逻辑

你遇到的lösung类乱码是UTF-8编码的变音字符被错误按Latin-1解析导致的,且OpenCV的imwrite接口原生对非ASCII文件名支持不好,直接替换变音字符为ASCII字符组合是最稳妥的方案。
无需修改原PDF文件,仅在生成输出PNG文件名时做字符替换即可,不会改动源文件,风险更低。

1. 德语变音字符替换函数

def replace_german_umlauts(input_str):
    # 覆盖大小写变音、德语ß字符的映射规则
    char_map = {
        'ä': 'ae',
        'ö': 'oe',
        'ü': 'ue',
        'Ä': 'Ae',
        'Ö': 'Oe',
        'Ü': 'Ue',
        'ß': 'ss'
    }
    for original, target in char_map.items():
        input_str = input_str.replace(original, target)
    return input_str

2. 修改后的完整可运行代码

from pdf2image import convert_from_path
import os
import cv2

def replace_german_umlauts(input_str):
    char_map = {
        'ä': 'ae',
        'ö': 'oe',
        'ü': 'ue',
        'Ä': 'Ae',
        'Ö': 'Oe',
        'Ü': 'Ue',
        'ß': 'ss'
    }
    for original, target in char_map.items():
        input_str = input_str.replace(original, target)
    return input_str

if __name__ == '__main__':
    # 初始化路径
    dir_name = os.getcwd()
    path_pdf = os.path.join(dir_name, 'data', 'doc', 'October')
    save_path = os.path.join(dir_name, 'data', 'blanko')
    # 确保输出目录存在
    os.makedirs(save_path, exist_ok=True)

    # 遍历PDF目录
    for pdf_file in os.listdir(path_pdf):
        # 判断是否为PDF文件,兼容大写PDF后缀
        if pdf_file.lower().endswith('.pdf'):
            full_pdf_path = os.path.join(path_pdf, pdf_file)
            images = convert_from_path(full_pdf_path, dpi=300, poppler_path='C:/Develop/poppler-0.68.0_x86/poppler-0.68.0/bin')
            
            # 处理输出文件名:替换变音字符 + 替换后缀
            base_name = os.path.splitext(pdf_file)[0]
            processed_base_name = replace_german_umlauts(base_name)
            output_png_name = f"{processed_base_name}.png"
            output_full_path = os.path.join(save_path, output_png_name)

            # 保存文件
            tmp_path = os.path.join(save_path, 'tmp.png')
            images[0].save(tmp_path, 'PNG')
            img = cv2.imread(tmp_path)
            cv2.imwrite(output_full_path, img)

3. 可选:重命名原PDF文件

如果确实需要批量修改原PDF的文件名,可在遍历文件时新增如下逻辑,操作前请务必备份原文件避免数据丢失:

for pdf_file in os.listdir(path_pdf):
    if pdf_file.lower().endswith('.pdf'):
        # 处理原文件名
        processed_pdf_name = replace_german_umlauts(pdf_file)
        old_full_path = os.path.join(path_pdf, pdf_file)
        new_full_path = os.path.join(path_pdf, processed_pdf_name)
        # 重命名原文件
        os.rename(old_full_path, new_full_path)
        # 后续转换逻辑直接使用new_full_path即可

内容的提问来源于stack exchange,提问作者Miyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:36:05