Tika PDFBox 讀取繁體中文編碼錯誤
最近遇到個詭異的問題,就是當 Tika 去解析 PDF 文件時,如果文件有使用特定編碼(ETenms-B5),就會解析出亂碼,Tika 解析 PDF 的部分是使用 PDFBox,而我遇到的問題也正好是存在已久的 PDFBox bug。
問題
PDFBox 在解析檔案時,若該 PDF 含有 ETenms-B5-H 編碼,則會解析出亂碼。
基礎知識
PDF 的預設字集是 Adobe 公司自行編碼的 CID 字集,不是大家通用的萬國碼 Unicode,所以在讀取內容時,會先透過一個叫做 CMap 的檔案,對映到 CID 字集,以便在顯示的時取得正確的字形。
舉例來說,ETenms-B5-H 的 CMap,裡面描述的是怎麼把 ETenms-B5-H 的編碼對應到 CID 編碼,這樣 PDF 檔案如果包含 ETenms-B5-H 的編碼,開啟檔案時就會透過 CMap 得到 CID 編碼並秀出正確的字。
ETenms-B5-H、ETenms-B5-V 是倚天輸入法以 BIG5 為基礎發展的擴充集(V 為垂直書寫、H 為水平),基本上使用細明體、新細明體、標楷體等都有可能會用到它,所以要多注意,這個編碼方式是繁體中文專用,所以基本上只有台灣等地會用到。
解決方法
我將 PDFBox 的 jar 檔解壓縮後,檢查裡面的 CMap,發現 PDFBox 內確實有 ETenms-B5-H 的 CMap 對應檔(否則執行過程中會報錯),但是內容殘缺不全,所以我就拿在同位址下另一個倚天的編碼 ETen-B5-H 內容複製過去把內文中的 ETen-B5-H 改成 ETenms-B5-H,重新封裝 jar 檔,就能夠順利解析了。
註:ETen-B5-H 和 ETenms-B5-H 一樣,但 ETenms-B5-H 將半寬的拉丁字符替換成比例字符。