創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2020年5月30日 星期六

Windows上的文件編碼與gVim界面選單出現亂碼的問題

問題描述

在Windows使用gVim時發現開啟的中文文字檔出現亂碼,很容易知道因為是是utf-8編碼的文字檔,在預設使用cp950編碼的Windows上開啟,因編碼不同,自然是亂碼。直覺上這問題應該好解決,設置Vim使用utf-8即可:

:set encoding=utf-8
試了沒問題,因為我習慣用utf-8,所以在 _vimrc 加入 set encoding=utf-8

重啟Vim後我卻發現,這回輪到命令選單變成亂碼,即使再加入langmenu的設置後重開Vim也是:

set langmenu=zh_TW.UTF-8
此時 :set all 的顯示結果中也出現 langmenu=zh_TW.UTF-8 ,但選單是亂碼。

langmenu必須在menu載入之前做好設置,故要加在 _vimrc 中。但如果真要在執行Vim時切換選單語言,做法像是先移除選單,重新設置langmenu,重讀選單語言翻譯[1]:

:source $VIMRUNTIME/delmenu.vim
:set langmenu=zh_TW.UTF-8
:source $VIMRUNTIME/menu.vim
上述delmenu.vim用來移除選單;menu.vim用來翻譯選單語言,而語言檔在 $VIMRUNTIME/lang 中,其中有個README.TXT中有些說明。

我試著這樣做之後選單上的中文字則是可正常顯示,不清楚為何設在 _vimrc中會造成亂碼,懷疑是否bug?

另一個觀察到的現象則是編輯的檔案名稱若有中文,暫存的swap檔與最終存檔時,檔名也可能出現亂碼。

我開始懷疑encoding選項影響的層面似乎比我想像的多,而我須要的是希望在讀、寫文件時做正確編碼,之後查了一下,發現果然如此。編碼方面的問題倒不難解決,反而是命令選單的亂碼現象困擾了好一陣子。

在無法解決命令選單亂碼的期間,只好先暫時做個補救的措施,後來花不少時間排查,才發現命令選單亂碼的成因,終於得以解決。

綜合以上,簡單說是二個問題:一、未正確設置Vim的文件編碼,導致中文文件內容,或中文檔名出現亂碼;二、gVim命令選單,即GUI界面的中文呈現亂碼。

本文談論以下幾點,並在最後附上參考連結:
  1. 針對上述第二問題,我採用的暫時措施。
  2. 上述第二問題的成因。
  3. 設置編碼。解決上述第一個問題。
  4. Vim與編碼有關的幾個設置。
  5. 與編碼相關的幾個問題。
  6. Vim與語言顯示有關的幾個設置。
  7. 其他
4,5,6也可以算是對1,2,3的一些補充說明。

2020年5月23日 星期六

Wget使用簡介

前言

有幾個命令行HTTP/FTP client之類的開放源碼軟體專案被廣泛採用,像curl, Wget, HTTrack, Aria2……。這些不同的軟體各有不同的特色,譬如curl支援最多種網路傳輸協定[1];HTTrack則可複製網站(俗稱砍站,但這詞可能讓人誤解),以方便離線瀏覽;Wget在某些方面可身兼curl與HTTrack之長;而Aria2支援了Bittorrent。

本文想談的是Wget,它可應付一般的HTTP使用情境,它也預設安裝在Ubuntu 20.04中,上述其他的,則要額外安裝。有圖形介面可用,但這裡只談命令行的使用。文中幾個範例中的URL是虛構的,僅純粹方便展示用。

Wget簡介

Wget的發展可回溯到1995年,是GNU Project的一部分,其名稱源自於World Wide Web與HTTP_GET的結合。支援HTTP, HTTPS, FTP, FTPS協定來下載檔案。非互動式命令行工具,可方便從腳本、排程,以及無圖形界面的終端機來執行它。一些功能像[2]:
  • 續傳之前失敗的下載
  • 檔名可用萬用字元
  • 遞迴目錄
  • 所下載網頁中的絕對連結可轉換成相對的
  • 支援多種作業平台