書伴Bookfere:英文電子書使用字典查詞時選中整段的解決方法

免费试用 30天Kindle unlimited:https://amzn.to/2NNksoy

免费试用 Audible有聲書30天:https://amzn.to/2MPAazN

昨天有位小伙伴向書伴提出一個問題,他在用Kindle 設備閱讀Calibre 轉換的兩本英文電子書時,發現它們查詞時的表現不一樣,其中一本可以正常查詞,而另外一本卻不能,只能選擇一整段內容。

▲ 只能選擇整段文字,無法正常查詢單詞

在獲得這兩本電子書的樣本,並仔細對比了它們的源代碼後,不論是元數據還是文本內容,並沒有發現查詞有問題的電子書存在什麼異常。但是不管怎麼轉換,查詞問題總會重現,這著實讓人疑惑。

最後,為了更徹底地做對比測試,我從這兩本書中各選取了一段,並將其轉換成電子書。有趣的現像出現了,居然一段無法正常查詞另一段卻能正常查詞。由此可以推測,問題一定是出在文本內容上。

但是這兩段內容看起來確實沒有什麼區別。當我同時選中這兩段內容的時候,突然發現它們的空格看起來有點兒不同。我所用的編輯器是 Sublime Text,當正常的空格被選中時理應顯示為“·”,而查詞有問題的段落的空格卻顯示為空(如下圖所示)。在確認異常空格的 HTML 實體後,終於找到了問題的癥結。

和漢字不同,英文單詞之間必須要有空格才有意義,但是在HTML 中,空格可以分為很多種,其中最常見的就是普通的ASCII 空格,編輯或閱讀時,當一行的空間無法容納下一個單詞時,就會自動換到下一行。此外還有一種特殊的空格,被稱為“不換行空格(Non-breaking space)”,這種空格會阻止行的自動換行,編輯或閱讀時,當一行的空間不夠顯示時候,會破壞單詞的完整性以字母為單位折行。

這種空格在某些情況下適用,比如“100 km”,可以在“100”和“km”之間加一個不換行空格,這樣當一行的行尾空間無法容納這個計量單位的時候,“100 km”就會被放到下一行的行首,而不會出現“100”在上一行“km”在下一行的情況發生。而如果把所有應該用普通空格的地方換成了不換行空格,就是對不換行空格的濫用。這種濫用的情況雖然不常見,但由於編輯器或輸入法等意外情況,還是有可能出現的。

▲ 不換行空格不同形式的 HTML 字符實體

很顯然Kindle 的字典查詢功能並沒有對不換行空格特殊處理,它會把所有被不換行空格連接起來的單詞當作一個單詞,這也就​​是為什麼它會自動調用在線字典的原因(否則這麼一大段內容它就會給自動標註了)。所以,為了解決這個問題,我們需要在轉換電子書時把內容中的不換行空格替換成普通空格。

以Calibre 為例,在轉換電子書的設置面板中,切換到【搜索& 替換】功能,按照下圖所示,在正則表達式中填入\xa0+ 用來查找特殊空格,在替換文本中輸入一個普通空格(按一下空格鍵):

然後點擊【添加】按鈕將設置加入規則。這樣轉換出來的電子書查詞就恢復正常了,如下圖所示:

此問題雖得以解決,但正如前面所提到的,在HTML 中有很多類型的空格,有可能還會因為其它類型的空格導致類似的問題出現,到時只需要確認空格的實體,然後如法炮製將其替換成普通空格即可。

本文僅針對英文內容的電子書。中文內容的 AZW3 電子書也可能會出現查詢字典時選擇整段文本的情況,關於這個問題可參考《為什麼 AZW3 電子書查字典取詞時會選中一整句》這篇文章。

————————–

參考資料:

本文標題:《書伴Bookfere:英文電子書使用字典查詞時選中整段的解決方法》,本文鏈接:http://www.yunjialeguanwang.com/archives/5162.html