Calibre插件 Skip ASCII Text 解決中文名稱保存問題
核心思路
核心思路參照了知乎上Hsuan及走地雞的文章 https://zhuanlan.zhihu.com/p/596352034,對文件 calibre/src/calibre/utils/filename.py 中的 ascii_text() 函數(shù)進行修改從而使字符替換失效,進而解決中文名稱保存問題。
但該方法需要一定的知識儲備并且步驟較多,因此想到用函數(shù)替換去解決該問題,即用新的函數(shù)去替換對應的核心函數(shù)即可,可實現(xiàn)熱替換,不影響后續(xù)的版本升級,最大限度減少對Calibre本體代碼的影響。
核心代碼(放在文件ui.py
中)如下:
簡單說,就是當設置 prefs['SKIP_ASCII_TEXT']為True 時,把系統(tǒng)中的filenames模塊作用域內(nèi)的ascii_text函數(shù)替換成我們定義的ascii_text_pass函數(shù),否則重載filenames模塊以重新讀取被替換的函數(shù)。
另外設置了在主要圖形界面加載完畢后自動應用當前設定,不必每次開啟軟件后重新設置。
核心的部分只有這些,其余就是一些UI以及配置代碼。
插件的適用版本及環(huán)境
Windows10 環(huán)境下 v6.12.0 及 v6.14.1 測試可用
目前僅在Windows10系統(tǒng)下進行了開發(fā)及測試,其他環(huán)境的兼容性未知。
開發(fā)版本是v6.12.0,升級到最新的v6.14.1后仍生效。在github的calibre源碼里確認了最早可追溯的v0.9.33版本中對應文件路徑未發(fā)生過改動。
其他可能存在的問題點是使用的UI及配置代碼可能在過早的版本中不受支持。
插件下載地址
源碼及壓縮包放到了gitee上。
到該頁面(https://gitee.com/shiratori3/calibre-plugins/releases/tag/v1.0.0)下載zip壓縮包 skip_ascii_text_plugin.zip 即可。
插件安裝及卸載
安裝步驟:
主工具欄的首選項(Preference)

→ 高級選項(Advanced)中的插件(Plugins)

→ 從文件里加載插件(Load Plugin from file)

→ 選擇對應 skip_ascii_text_plugin.zip 壓縮包
→ 點擊確認即可
→ 如果有提示選擇安裝到哪個位置,選擇主工具欄(main toolbar)
卸載只需把上述步驟的從文件里加載插件(Load Plugin from file) 換成移除插件(Remove plugin)即可。
卸載后插件功能自動失效。
如果重新安裝會繼承卸載前的配置狀態(tài)。卸載前是關閉狀態(tài)的話需要先切換至開啟狀態(tài)才能生效。
插件使用及配置
加載后默認是開啟狀態(tài),但安裝后需要重啟Calibre使插件生效。

點擊主工具欄中的Skip ASCII即可查看當前插件的開啟狀態(tài)。

Status of SKIP_ASCII_TEXT: ON 表示當前為開啟狀態(tài),會替換掉ascii_text()函數(shù);OFF則為關閉狀態(tài)。
開啟后,導入書籍及文件均不受ascii_text()函數(shù)影響,導出到設備同理。
點擊主工具欄中的Skip ASCII后再點擊 Configure 進行配置。

點擊 Skip ascii_text() 前的復選框即可切換狀態(tài),勾選為開啟。
點擊OK保存當前修改,點擊Cancel取消當前修改。
或者也可以在插件列表中雙擊 Skip ASCII Text Plugin 插件進行配置。
其他問題
Q1:插件本身安全么?
A:插件壓縮包其實就是把對應Python腳本文件包裝起來了,不放心的可以解壓出來直接看源代碼(用記事本即可打開)。除了核心代碼部分會對Calibre源代碼有影響之外,其他代碼都是無副作用的。
Q2:插件可能會有其他影響么?
A:目前未發(fā)現(xiàn)有bug,影響與原本修改ascii_text()函數(shù)的方法應該是一致的,但修改ascii_text()函數(shù)這個方法具體有什么負面影響,我沒進一步研究。如果發(fā)現(xiàn)有bug可以在評論區(qū)留言或私信溝通。
Q3:此前已導入的文件如何改成中文名稱?
A:修改函數(shù)只能影響之后的加載及導出,對此前已加載的文件沒有影響。要想把此前的文件也改成中文名稱,只能在插件開啟的情況下導出后重新導入。
步驟如下:選中想要重新加載的文件→保存至硬盤(save to disk)→保存至單一文件夾(save to disk in a single folder)→重新導入文件→使用Find Duplicates插件查重→按修改日期排序,刪除較早修改日期的重復文件即可。
Find duplicates插件見插件論壇頁面:https://www.mobileread.com/forums/showthread.php?t=131017
參考資料
https://github.com/kovidgoyal/calibre
https://manual.calibre-ebook.com/develop.html
https://manual.calibre-ebook.com/creating_plugins.html
https://manual.calibre-ebook.com/plugins.html#plugin
https://zhuanlan.zhihu.com/p/596352034