OpenCC

BYVoid·BYVoid.OpenCC

Library for conversion between Traditional and Simplified Chinese

Open Chinese Convert (OpenCC) is an opensource project for conversions between Traditional Chinese, Simplified Chinese and Japanese Kanji (Shinjitai). It supports character-level and phrase-level conversion, character variant conversion and regional idioms among Mainland China, Taiwan and Hong Kong. This is not translation tool between Mandarin and Cantonese, etc.

winget install --id BYVoid.OpenCC --exact --source winget

Latest 1.4.2·August 22, 2026

Release Notes

2026年8月22日

  • 發佈重點:轉換熱路徑大幅加速(純文字語料的整體轉換時間最多降至原本的 1/7),修復大端序平台載入 legacy .ocd 字典得到空字典的問題,並新增兩個實驗性 API(詞級候選查詢與一對多歧義標註,含 CLI --ambiguities)。詞庫方面修正了 s2twp 的數處貪婪匹配錯誤與 tw2t/tw2s 對簡體「么」的破壞性轉換,補充臺灣/香港地區詞,並修正古籍語境下 s2t 的一對多字用字。C++ ABI 與 1.4.1 相同(SOVERSION 1.4),實驗性 API 皆位於未安裝的私有標頭或巨集開關之後,下游程式無需重新連結。
  • 詞庫更新:
    • 修復 tw2t/tw2s/tw2sp 會把已是簡體的「什么」轉成「什幺」的問題:生成的 TWVariantsRev 含 么 -> 幺(臺灣標準 幺 -> 么 的反向),在 TWVariantsRevPhrases.txt 補上「什么/怎么/这么/那么/多么/要么/好么/甚么」等例外映射至「麼」形,同時保留「老么 → 老幺」等真正的 yao1 詞(#1469, #1473)。
    • 修復 s2twp 因較短詞條先命中而拆錯詞的問題:補上「互联网络」「快闪存储器」「老挝人民民主共和国」的完整詞條,並將「老撾人民民主共和國」對應到臺灣官方譯名「寮人民民主共和國」(#1467, #1468)。
    • 「梁/樑」:新增臺灣地區用字映射與人名、地名保護詞條(#1407);並將 TWVariantsRevPhrases 與 STPhrases 對齊,補上 41 條梁(棟梁義)的反向詞組映射,使 tw2t 能從上下文還原「橋樑」而不誤傷姓氏、地名(#1424)。
    • 新增奧斯卡最佳導演與最佳影片製片人的臺灣/香港譯名詞條(取自中文維基百科 NoteTA 地區詞表並以 Wikidata 交叉核對,僅收錄真正存在音譯差異者,如 卡梅隆/卡麥隆/金馬倫)(#1466)。
    • 新增地區詞「內存條 → 記憶體模組」(s2twp/s2hkp,含反向詞條)(#1475)、「数字人文 → 數位人文」(s2twp/tw2sp)(#1465)。
    • s2t:修正古籍語境下一對多字的用字。征/咸/斗/里/范/岳/冲/郁/谷 在 STPhrases 沒有對應詞條時會退回 STCharacters,而那裏的候選次序是按現代用法排的,碰上文言文和書名就常常選錯。此次按義項補入詞條:征伐義(征南、从征实录)、年號與副詞義(咸淳、少长咸集)、星宿義(斗姆、东斗星君)、地名與音譯(甫里、摩里支)、姓氏義(范文正、岳武穆)、道教與梵語音譯(道冲、郁迦罗越);谷神 改為保留「谷」(《老子》「谷神不死」),谷神星 則因鍵更長,仍映射為「穀神星」。這批問題是在清理殆知閣文獻時發現的,該批書名中 47 條誤轉修正了 46 條,現代語義的轉換一律不受影響(#1479)。
    • s2t:「小丑」不再預設轉換為「小醜」(#1423);「雇」改為 STCharacters 中「僱」以外的非預設候選(#906);新增「这周/那周/若干周/几周/周线 → 週」等指示與量化用法,並補上「周围/周边/周遭」的分詞保護詞條(#1428);新增顯式詞條「复盘 → 復盤」,使其不再只依賴 复 的候選順序(#1427)。
    • t2s:修正過度轉換「乾斷食 → 干断食」「乾紅 → 干红」(#621, #1429)。
    • 修正「鑒」相關詞條與若干提稱語,如「郝铭鉴 → 郝銘鑒」(#1421)。
  • 效能:
    • 轉換熱路徑跳過不可能匹配的字元區段:PrefixMatch 在建構時建立 key 起始字元表並提供 SkipUnmatchable(),讓 Conversion::AppendConverted 與 MaxMatchSegmentation 一次消化整段不可能作為詞條開頭的字元(ASCII、標點、emoji 以及不作為任何 key 開頭的漢字),取代逐字元的 trie 查詢。過濾以精確碼位而非 UTF-8 首位元組進行(0xE4..0xE9 這些常見漢字首位元組幾乎都有 key,按首位元組只能跳過約 10%,按碼位則有 69–76% 的位置不匹配任何 key)。22 MB 繁體語料的整體 CLI 時間(含字典載入):t2s 3.40s → 0.52s、t2tw 3.43s → 0.30s、s2twp 8.40s → 4.86s;4 MB 中英混合語料的 t2s 0.83s → 0.11s。啟動時間、最大 RSS 與缺頁次數不變,轉換輸出逐位元組不變(以對照逐字元參考實作的差分 fuzz 測試保證)(#1464)。
  • 實驗性 API / CLI:
    • 新增 librime 風格的詞級候選查詢 Converter::GetConversionCandidates,列舉單一詞經整條轉換鏈後的所有形式(如 s2t 的 里 展開為 里、裏)。該 API 以 OPENCC_ENABLE_UNSTABLE_API 巨集開關隔離,不進入已安裝標頭與 OPENCC_ABI_VERSION 契約;成員刻意設為非虛擬,開啟巨集不改變 Converter 的 vtable(#1431)。
    • 新增一對多歧義標註與 CLI --ambiguities 模式:轉換結果與 Converter::Convert 完全一致,同時標出每一個字典匹配為一對多的輸出區段(如 STPhrases 的 文丑 -> 文丑 文醜、TSCharacters 的 鍾 -> 钟 锺),呼叫方可據此定位歧義位置並按需以 GetAllConversions 取得候選。檔案輸入輸出 JSONL 記錄且記憶體用量有界,互動式 stdin 則逐行輸出 JSON 封包。實作位於未安裝的私有標頭,不改變已安裝標頭與 ABI,轉換熱路徑不受影響(#1461, #1462)。
  • .ocd 字典格式:
    • 修復大端序平台(s390x、ppc64、sparc64、hppa)上 legacy 64-bit .ocd 佈局的偵測:原本以探測位元組 [4..7] 是否為零來判斷,該寫法僅在小端序主機成立,導致大端序平台將舊檔誤判為固定寬度格式並載入為空字典。三處判斷統一改用 LooksLikeLegacy64Field(),以原生 uint64_t 讀取探測值並檢查高 32 位,在兩種位元組序下皆正確(#1471, #1472)。
  • Node.js:
    • npm 套件的源碼編譯 fallback 從 node-gyp 改為 Bazel:原生 addon 優先透過 @opencc/opencc-- 預編譯 scoped 套件安裝(涵蓋 macOS x64/arm64、Linux x64/arm64、Windows x64,均以 Bazel 構建,字典隨包預編譯);沒有預編譯二進位套件的平台,npm install 會以 Bazel 完整地從源碼構建——編譯 //node:opencc 並重新生成字典(bazel / bazelisk 取自 PATH,或經 npx 自動下載 bazelisk;字典生成腳本的 Python 由 Bazel hermetic 工具鏈提供)。binding.gyp 與 .gypi 構建定義刪除,node-gyp、node-gyp-build、node-addon-api、prebuildify 依賴與 prebuild npm script 一併移除;tarball 不再攜帶 deps/(C++ 三方依賴改由 Bazel Central Registry 提供),改為攜帶 Bazel workspace、src/ C++ 源碼與 data/ 字典源檔(#1426, #1430)。
    • CI 測試任務、Makefile target 與源碼 checkout 的開發構建一併改用 Bazel,與 npm 發佈所用的構建路徑一致;Windows CI 任務移至 windows-2025-vs2026(#1426)。
  • 打包 / 構建系統:
    • packaging/debian/ 同步至 Debian 的 1.4.1+ds1-8。Debian 已採納上游先前提出的 jieba 插件打包提案(拆為 opencc-jieba 與 arch:all 的 opencc-jieba-data 兩個套件,內嵌 cppjieba 的理由記於 debian/README.source);Debian 端亦重新啟用了 autopkgtest。packaging/debian/SPLIT_PROPOSAL.md 隨提案落地移除。另外 1.4.1+ds1-8 修復了 .ocd2 被放進 Architecture: all 套件的問題:.ocd2 是依主機位元組序寫出的 marisa-trie 映像,所有架構都會拿到 arch:all buildd 上構建的小端序副本,opencc 在 s390x 上因而以 size > avail_ 失敗(Debian bug #1145010,由重新啟用的 s390x autopkgtest 揪出)。*.ocd2 已移回 arch:any 的 libopencc1.4、jieba_merged.ocd2 移回 arch:any 的 opencc-jieba;libopencc-data 與 opencc-jieba-data 現在只含 JSON 配置與純文字 jieba 詞典來源。
    • Debian 套件構建改在 debian:sid 容器中進行(同步來的打包以 unstable 為目標,Ubuntu LTS runner 無法滿足),並在 dpkg-buildpackage 前套用 debian/patches quilt series(自動跳過已在樹中的補丁);arm64 改用 ubuntu-24.04-arm runner 原生構建,取代先前的交叉構建(#1420)。
    • 新增 packaging/freebsd/:FreeBSD ports tree chinese/opencc 條目的參考副本,供上游審閱與準備提交給 port maintainer 的改動。
    • 新增精簡 C++ 源碼包發佈流程(release-source.yml):以 OPENCC_SOURCE_PACKAGE_PROFILE=opencc 產生僅含 C++ 核心的 CPack 壓縮包(不含 Node.js、Python、文檔、packaging 與 plugins),並以 CMake 與 Bazel 雙路徑冒煙測試後上傳至 draft release;為此保留 Bazel workspace 檔案與頂層 patches/,僅排除可能含 API key 的 .bazelrc.user。
    • 修正 cmake/GitVersion.cmake 的 fallback 版本號:1.4.1 發佈時仍停留在 1.4.0,導致從釋出的 tarball(無 git 資訊)構建時版本回報為 1.4.0;本次發佈同步將其更新至 1.4.2,並讓 scripts/compute-version.sh 的 fallback 與之一致(先前停留在 1.2.1)。因此 Debian 打包的 0010-fix-git-version-fallback.patch 對 1.4.2 已無作用而移除,0012-fix-legacy-dict-detection-on-big-endian.patch 亦已包含於本次發佈。
    • Windows 發佈自本版起啟用程式碼簽章憑證:可攜式 CLI 壓縮包中的執行檔,以及 win32-x64 npm 二進位(opencc.node、opencc-jieba.dll)皆經 Authenticode 簽章,簽章服務由 SignPath.io 免費提供、憑證由 SignPath Foundation 免費提供,發佈流程改用其 release-signing policy;相關聲明與簽章/隱私政策見 README 的「Code Signing 程式碼簽章」一節(#1458, #1459)。
  • 測試:
    • PrefixMatchTest 改用測試專屬的字典檔名,避免與 MarisaDictTest 在共享工作目錄下爭用同一個 dict.ocd2,該競爭會使並行 ctest(如 dh_auto_test 的 ctest -j8)偶發失敗。

Installer type: zip

x64DAB0142FF6401219A5E556CEE215323753EEAC38752DDE4CFDDF8035746605F1

Details

Homepage
https://github.com/BYVoid/OpenCC
License
Apache-2.0
Publisher
BYVoid
Support
https://github.com/BYVoid/OpenCC/issues

Tags

chinesechinese-conversionchinese-translationsimplified-chinesetraditional-chinese

Older versions (5)

1.4.1
x64B686B0ECC3723120E214BAB4158DD7B6E784975A312BA18D74F782AF77596742
1.4.0
x6443BE8E715063B532574AD0F4F6AD1154C977FE306AC0ED31D5111B657F780D7B
1.3.2
x6486C94D0B11AA69EF1F962EDF73EB238A8A78A95DCB6C87F1B5501989ECA19F2B
1.3.1
x64A11FB10DBE5A301982D8944F71C3EBA9BC33B23BAB10C170A9D38A0AF73309D4
1.3.0
x64F90807C9339110571D9C0235E4662E5D098B2E73B9910CF9A5FD84FE5026BC22