吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 496|回复: 8
收起左侧

[Python 原创] Python将文档内的康熙部首转换为普通汉字

[复制链接]
52zuiyun 发表于 2025-3-29 23:51
本帖最后由 52zuiyun 于 2025-3-30 10:33 编辑
https://www.52pojie.cn/thread-2019834-1-1.html

原贴:某个word文档,部分文字无论如何都不能改成雅黑外的其他字体,无论是word里清除格式,还是把内容复制到记事本,再复制到新建的word文档里,只保留文本,都是一样。想尽了各种办法,各种设置,都这样。其他的word文档正常,没有这个问题。这到底是什么原因,因此重装了office,开始以为好了,过一会发现还是一样。用wps可以全部设置为宋体,没有雅黑字符,但是上传到百度网盘,在百度网盘里那些不可修改的字符都变成了空白或者说空格(无法修改为雅黑之外的字体的时候显示为方框)
文档通过百度网盘分享,大神研究一下,求答疑解惑,求答疑解惑,求答疑解惑 快疯了。新建 Microsoft Word 文档 (2).docx 链接: https://pan.baidu.com/s/11gbB_XFF01M2QuqdaEJbxg?pwd=456i 提取码: 456i
比如第三行 把我当成小孩子的小  后边的教学风格的风
我已经弄好了。在kimi里,让kimi排版,排版完了复制出来还是不行,然后继续让kimi转换为markdown格式,复制出来生成markdown文件,然后导出为pdf文件,然后转换为word文件,这时候正常了
我十分的想知道到底是怎么回事。粘贴的时候只选择文本,复制到记事本后在建立word ,word里清除格式全部无效。

https://wwir.lanzoum.com/iHBm92s2jysj 密码:52pj
转换工具放在这里了,解压缩密码:52pojie 局部截取_20250330_103154.png
实⽤提⽰词模板

原文档,打开后部分文字虽显示「微软雅黑」字体,但实际为「MS 明朝」缺省字体:⽤ ⽰


经对比,发现此为康熙部首:

Name:        Kangxi-Radikale
Ebene:        Mehrsprachige Basis-Ebene [1]
Erster Index:        U+2F00 [2]
Letzter Index:        U+2FDF [2]
Anzahl belegter Zeichen:        214 [3]
Anzahl definierter Zeichen:        214


最直接的办法就是字典冲洗,然后转换为常用汉字字符:
[JavaScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
{
  "U+2F00": {
    "radical": "⼀",
    "normal": "一",
    "pinyin": "yī",
    "strokes": 1
  }




将来214个康熙部首作为字典引入,进行修改字符,最后重新保存文件,部分难以识别的单独创建。
例:
[Python] 纯文本查看 复制代码
1
2
3
4
5
    def convert_to_normal(self, text):
fixed_map = {
            # 防止错误转换的常用字
            '\u5b9e': '\u5b9e'# 实 → 实
            '\u7528': '\u7528'# 用 → 用



以下是Python转换代码:


[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
import tkinter as tk
from tkinter import ttk, filedialog, messagebox, scrolledtext
import tkinter.font as tkFont
from docx import Document
from datetime import datetime
from docx.oxml.ns import qn
from pathlib import Path
import os
import json
import requests
from requests.exceptions import RequestException
 
class FontConverterApp:
    def __init__(self, root):
        self.root = root
        self.current_file = None
        self.kangxi_mapping = self.load_kangxi_mapping_from_url()
        self.init_ui()
        self.log("程序已启动")
 
    def load_kangxi_mapping_from_url(self):
        """加载康熙部首映射字典"""
        CLOUD_URL = ".../kangxi_mapping.json"
        try:
            response = requests.get(CLOUD_URL, timeout=5)
            response.raise_for_status()
            return response.json()
        except RequestException as e:
            self.log(f"字典加载失败: {str(e)}")
            return {}  # 返回空字典避免程序崩溃
 
    def convert_kangxi_to_normal(self, text):
        """将文本中的康熙部首转换为标准汉字"""
        for code, mapping in self.kangxi_mapping.items():
            text = text.replace(mapping['radical'], mapping['normal'])
        return text
 
    def init_ui(self):
        self.root.title("大帝清洗器 - 吾爱破解 - 52zuiyun")
        ttk.Label(self.root, text="目标字体:").grid(row=0, column=0, padx=5, pady=5)
        self.font_combo = ttk.Combobox(self.root, values=self.get_system_fonts(), width=30)
        self.font_combo.grid(row=0, column=1, padx=5, pady=5)
        ttk.Button(self.root, text="选择文件", command=self.import_file).grid(row=1, column=0, padx=5, pady=5)
        ttk.Button(self.root, text="开始转换", command=self.convert_font).grid(row=1, column=1, padx=5, pady=5)
        self.log_area = scrolledtext.ScrolledText(self.root, width=60, height=15)
        self.log_area.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
 
    def get_system_fonts(self):
        known_chinese = {'simsun', 'simhei', 'fangsong', 'kaiti', 'microsoft yahei'}
        chinese_fonts = set()
        for f in tkFont.families():
            f_lower = f.lower()
            if any(c in f_lower for c in known_chinese) or any('\u4e00' <= c <= '\u9fff' for c in f):
                clean_name = f.replace('@', '')
                if clean_name not in chinese_fonts:
                    chinese_fonts.add(clean_name)
        return sorted(chinese_fonts)
 
    def import_file(self):
        file_path = filedialog.askopenfilename(filetypes=[("Word Files", "*.docx")])
        if file_path:
            if not Path(file_path).exists():
                messagebox.showerror("错误", f"文件不存在:{file_path}")
                return
            self.current_file = os.path.abspath(file_path)
            self.log(f"成功导入文件:{self.current_file}")
 
    def convert_font(self):
        if not self.current_file:
            messagebox.showerror("错误", "请先选择Word文件")
            return
         
        font_name = self.font_combo.get()
        if not font_name:
            messagebox.showerror("错误", "请选择目标字体")
            return
         
        try:
            doc = Document(self.current_file)
            for para in doc.paragraphs:
                # 先转换康熙部首
                if self.kangxi_mapping:
                    para.text = self.convert_kangxi_to_normal(para.text)
                 
                # 再设置字体
                for run in para.runs:
                    run.font.name = font_name
                    run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)
             
            src_path = Path(self.current_file)
            save_path = src_path.parent / f"{src_path.stem}zuiyun{src_path.suffix}"  # 修改文件名生成方式
            doc.save(save_path)
            self.log(f"文件已自动保存到:{save_path}")
            messagebox.showinfo("成功", f"字体转换完成\n保存路径:{save_path}")
             
        except Exception as e:
            messagebox.showerror("错误", f"转换失败:{str(e)}")
            self.log(f"错误:{str(e)}")
 
    def log(self, message):
        timestamp = datetime.now().strftime("%H:%M:%S")
        self.log_area.insert(tk.END, f"[{timestamp}] {message}\n")
        self.log_area.see(tk.END)
 
if __name__ == "__main__":
    root = tk.Tk()
    app = FontConverterApp(root)
    root.mainloop()



[Python] 纯文本查看 复制代码
1
2
KANGXI_RADICALS = {
    "U+2F00": {"radical": "&#12032;", "normal": "一", "pinyin": "yī", "strokes": 1},

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
asky800 + 1 + 1 我很赞同!
lsq132273 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wapj20250313 发表于 2025-3-30 08:35
很好用,点赞
retsyo 发表于 2025-3-30 09:58
哦,看上去普通汉字,其实用到了不同的汉字?
鱼是一只我 发表于 2025-3-30 10:44
本帖最后由 鱼是一只我 于 2025-3-30 19:02 编辑

多谢,解决大问题了
chengduld 发表于 2025-3-30 18:52
这到底有啥子用处呢?
夕尘幽兰 发表于 2025-3-30 21:38
这不是远景论坛那个求助贴子吗?也发吾爱了
youzyouz 发表于 2025-3-31 10:51
哈哈哈哈哈哈太棒啦 感谢分享  解决问题的思路值得学习  话说正常文档内容为什么会有用康熙部首的?
sncel3 发表于 2025-4-1 16:21
碰到过这个情况,一直莫名其妙,原来如此,同时谢谢分享的工具
sncel3 发表于 2025-4-7 18:00
询问一下,使用了一次,隔天再次打开,出现错误。再次下载亦如此,不知是何原因?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-8 09:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表