Debian 是一種流行的 Linux 操作系統(tǒng),提供了豐富的文本數(shù)據(jù)轉(zhuǎn)換工具。在 Debian 中,我們可以使用 iconv 命令來完成文本編碼轉(zhuǎn)換、文件名轉(zhuǎn)換等操作,使用編輯器和文本處理工具來進(jìn)行純文本格式化、提取等操作。
文本數(shù)據(jù)轉(zhuǎn)化工具列表:
軟件包 | 流行度 | 大小 | 關(guān)鍵詞 | 說明 |
libc6 | V:925, I:999 | 12987 | 字符集 | 使用 iconv(1) 的不同語言環(huán)境(locale)之間的文本編碼轉(zhuǎn)換器 (基礎(chǔ)的) |
recode | V:2, I:19 | 601 | 字符集+換行 | 不同語言環(huán)境(locale)之間的文本編碼轉(zhuǎn)換器(多功能的,更多別名和特性) |
konwert | V:1, I:48 | 134 | 字符集 | 不同語言環(huán)境(locale)之間的文本編碼轉(zhuǎn)換器(高檔的) |
nkf | V:0, I:9 | 360 | 字符集 | 日語字符集翻譯 |
tcs | V:0, I:0 | 518 | 字符集 | 字符集翻譯 |
unaccent | V:0, I:0 | 35 | 字符集 | 代替重音字符,使用和它們相當(dāng)?shù)姆侵匾糇址?/td> |
tofrodos | V:1, I:18 | 51 | 換行 | 在 DOS 和 Unix 之間的文本格式轉(zhuǎn)換: fromdos(1) 和 todos(1) |
macutils | V:0, I:0 | 312 | 換行 | 在 Macintosh 和 Unix 之間的文本格式轉(zhuǎn)換: frommac(1) 和 tomac(1) |
一、iconv命令
iconv(1) 是 libc6 軟件包的一部分并且它可以在類 Unix 的系統(tǒng)上轉(zhuǎn)換字符的編碼。能夠通過如下的命令用 iconv(1) 來轉(zhuǎn)換文本文件的編碼。
$ iconv -f encoding1 -t encoding2 input.txt >output.txt
編碼值是大小寫不敏感的,且會在匹配時忽略“-”和“_”??梢允褂谩癷conv -l”命令檢查支持的編碼。
編碼值和用法的列表:
編碼值 | 用法 |
ASCII | 美國信息交換標(biāo)準(zhǔn)代碼,7位代碼不帶重音符號 |
UTF-8 | 用于所有現(xiàn)代操作系統(tǒng)的多語言標(biāo)準(zhǔn) |
ISO-8859-1 | 舊的西歐語言標(biāo)準(zhǔn),ASCII + 重音符號 |
ISO-8859-2 | 舊的東歐語言標(biāo)準(zhǔn),ASCII + 重音符號 |
ISO-8859-15 | 舊的帶有歐元符號的西歐語言標(biāo)準(zhǔn)(ISO-8859-1) |
CP850 | code page 850,用于西歐語言的微軟 DOS 的帶有圖形的字符,ISO-8859-1 的變體 |
CP932 | code page 932, 日語 Microsoft Windows 的 Shift-JIS 變體 |
CP936 | code page 936,用于簡體中文的微軟操作系統(tǒng)風(fēng)格的 GB2312,GBK 或者 GB18030 的變體 |
CP949 | code page 949,用于韓語的微軟操作系統(tǒng)風(fēng)格的 EUC-KR 或者 Unified Hangul Code 的變體 |
CP950 | code page 950,用于繁體中文的微軟操作系統(tǒng)風(fēng)格的 Big5 的變體 |
CP1251 | code page 1251,用于西里爾字母的微軟操作系統(tǒng)風(fēng)格的編碼 |
CP1252 | code page 1252,用于西歐語言的微軟操作系統(tǒng)風(fēng)格的 ISO-8859-15 的變體 |
KOI8-R | 用于西里爾字母的舊俄語 UNIX 標(biāo)準(zhǔn) |
ISO-2022-JP | 日文郵件的標(biāo)準(zhǔn)編碼,只使用 7 位字節(jié) |
eucJP | 老的日文 UNIX 標(biāo)準(zhǔn)的 8 位字節(jié),和 Shift-JIS 完全不同 |
Shift-JIS | 日文 JIS X 0208 |
像 ASCII 和 ISO-8859 這樣適用于單字節(jié)的字符集,字符編碼和字符集幾乎指的是同一件事情。對于多字符的字符集,比如說,用于日文的 JIS X 0213,或用于差不多所有語言的 Universal Character Set (UCS, Unicode, ISO-10646-1) , 有多種編碼方案來序列化它們的字節(jié)數(shù)據(jù)。
- 日文的 EUC 和 ISO/IEC 2022 (也被稱為 JIS X 0202);
- Unicode 的 UTF-8、UTF-16/UCS-2 和 UTF-32/UCS-4 編碼。
對于以上這些,字符集和字符編碼之間有著明顯的區(qū)別;而對某些計算機(jī)廠家而言,code page 是作為字符編碼表的同義詞來使用。
請注意,大部分編碼系統(tǒng)共享 ASCII 的 7 位字符的同樣編碼,但也有一些列外。如果從通常所說的 shift-JIS 編碼格式,轉(zhuǎn)化老的日文 C 語言程序和 URL 數(shù)據(jù),到 UTF-8 格式,需要使用 “CP932” 作為編碼名來代替 “shift-JIS” 來得到期望的結(jié)果: 0x5C → “\” 和 0x7E → “~”.否則,這些將被轉(zhuǎn)化為錯誤的字符。
recode(1) 也可能被使用并且不僅僅是 iconv(1),fromdos(1),todos(1),frommac(1) 和 tomac(1) 功能的結(jié)合。想要獲得更多信息,請參見 “info recode”。
二、檢查文件編碼
能夠通過如下命令用 iconv(1) 來檢查一個文本文件是不是用 UTF-8 編碼的。
$ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found"
在上面的例子中使用 “–verbose” 參數(shù)來找到第一個 non-UTF-8 字符。
三、轉(zhuǎn)換文件名
這里是一個示例腳步,在同一目錄下,將在老的操作系統(tǒng)系統(tǒng)下創(chuàng)建的文件名編碼,轉(zhuǎn)換為現(xiàn)代 UTF-8.
#!/bin/sh ENCDN=iso-8859-1 for x in *; do mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)" done
四、換行符轉(zhuǎn)換
文本文件的格式,特別是行尾(換行符)編碼,有平臺獨立性。
不同平臺的換行符樣式列表:
平臺 | 換行符編碼 | 控制碼 | 十進(jìn)制 | 16 進(jìn)制 |
---|---|---|---|---|
Debian (unix) | LF | ^J |
10 | 0A |
MSDOS 和 Windows | CR-LF | ^M^J |
13 10 | 0D 0A |
蘋果的 Macintosh | CR | ^M |
13 | 0D |
換行符轉(zhuǎn)換程序, fromdos(1), todos(1), frommac(1), 和 tomac(1), 是相當(dāng)方便. recode(1) 也是有用的。
注意:
- 在 Debian 系統(tǒng)上的一些數(shù)據(jù),如 python-moinmoin 軟件包的 wiki 頁面數(shù)據(jù),使用 MSDOS 式樣的 CR-LF 作為換行符編碼。所以,上面的規(guī)則僅僅是一個通用規(guī)則;
- 大部分編輯器 (比如: vim, emacs, gedit, …) 能夠透明處理 MSDOS 式樣的換行符文件;
- 對于混合 MSDOS 和 Unix 式樣的文件,統(tǒng)一到 MSDOS 換行符式樣,使用 “sed -e ‘/\r$/!s/$/\r/'” 代替 todos(1) 比較好。 (例如,在使用 diff3(1)移植兩個 MSDOS 式樣的文件后.)這是因為 todos 給所有的行增加 CR。
五、TAB轉(zhuǎn)換
這里有一些轉(zhuǎn)換 TAB 代碼的專業(yè)工具。
bsdmainutils 和 coreutils 包中的用于轉(zhuǎn)換 TAB 的命令列表:
功能 | bsdmainutils |
coreutils |
---|---|---|
把制表符擴(kuò)展成空格 | “col -x “ |
expand |
將空格轉(zhuǎn)換為制表符(unexpand) | “col -h “ |
unexpand |
indent 包中的 indent(1) 命令能夠重新格式化 C 程序中的空格。例如 vim 和 emacs 這樣的編輯軟件可以被用來擴(kuò)展 TAB。就拿 vim 來說,能夠按順序輸入 “:set expandtab” 和 “:%retab” 命令來擴(kuò)展 TAB。也可以按順序輸入 :%set noexpandtab” 和 “:%retab” 命令來復(fù)原。
六、自動轉(zhuǎn)換編輯器
像 vim 這樣的現(xiàn)代智能編輯器軟件是相當(dāng)聰明的并且能夠處理任何編碼系統(tǒng)以及任何文件格式。應(yīng)該在支持 UTF-8 編碼的控制臺上并在 UTF-8 環(huán)境下使用這些編輯器來獲得最好的兼容性。
以 latin1(iso-8859-1)編碼存儲的舊西歐語言的 Unix 文本文件,“u-file.txt”,能通過如下所示的用 vim 輕易的編輯。
$ vim u-file.txt
這是可能的因為 vim 的文件編碼自動檢測機(jī)制先假定文件是 UTF-8 編碼,如果失敗了,則假定它是 latin1 編碼。
以 latin2(iso-8859-2) 編碼存儲的舊波蘭語的 Unix 文本文件,“pu-file.txt”,能通過如下所示的用 vim 編輯。
$ vim '+e ++enc=latin2 pu-file.txt'
以 eucJP 編碼存儲的舊日語的 Unix 文本文件,”ju-file.txt”,能通過如下所示的用 vim 編輯。
$ vim '+e ++enc=eucJP ju-file.txt'
以所謂的 shift-JIS 編碼 (更確切的說法是:CP932) 存儲的舊日語 MS-Windows 文本文件,”jw-file.txt”,能通過如下所示的用 vim 編輯。
$ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'
當(dāng)一個文件用 vim 打開的時候帶有 “++enc” 和 “++ff” 選項,在 Vim 命令行輸入 “:w” 命令會以原格式存儲文件并且會覆蓋原文件。也可以在 Vim 命令行指定存儲文件名及其格式,例如,”:w ++enc=utf8 new.txt”。
七、提取純文本
如下所示讀入 web 頁面并把它轉(zhuǎn)化成文本文件。當(dāng)從 Web 中拷貝配置或者是在 web 頁面中應(yīng)用類似 grep(1) 的基礎(chǔ) Unix 文本工具時,以下命令是非常有用的。
$ w3m -dump https://www.remote-site.com/help-info.html >textfile
同樣,可以使用如下所示的工具從其他格式提取純文本數(shù)據(jù)。
用于提取純文本數(shù)據(jù)的工具列表:
軟件包 | 流行度 | 大小 | 關(guān)鍵詞 | 功能 |
w3m | V:14, I:188 | 2837 | html→text | 用 “w3m -dump” 命令把 HTML 轉(zhuǎn)化為文本的轉(zhuǎn)換器 |
html2text | V:3, I:53 | 274 | html→text | 高級的 HTML 到文本文件的轉(zhuǎn)換器 (ISO8859-1) |
lynx | V:24, I:329 | 1948 | html→text | 用 “lynx -dump” 命令把 HTML 轉(zhuǎn)化為文本的轉(zhuǎn)化器 |
elinks | V:3, I:21 | 1654 | html→text | 用 “elinks -dump” 命令把 HTML 轉(zhuǎn)化為文本的轉(zhuǎn)換器 |
links | V:3, I:29 | 2314 | html→text | 用 “links -dump” 命令把 HTML 轉(zhuǎn)化為文本的轉(zhuǎn)換器 |
links2 | V:1, I:12 | 5492 | html→text | 用 “links2 -dump” 命令把 HTML 轉(zhuǎn)化為文本的轉(zhuǎn)換器 |
catdoc | V:14, I:154 | 686 | MSWord→text,TeX | 轉(zhuǎn)化 MSWord 文件到純文本或 TeX文件 |
antiword | V:1, I:8 | 589 | MSWord→text,ps | 轉(zhuǎn)化 MSWord 文件到純文本或 ps 文件 |
unhtml | V:0, I:0 | 40 | html→text | 從一個 HTML 文件里面刪除標(biāo)記標(biāo)簽 |
odt2txt | V:2, I:39 | 60 | odt→text | 從開放文檔格式到文本格式的轉(zhuǎn)化器 |
八、高亮并格式化數(shù)據(jù)
可以通過如下所示的來高亮并格式化純文本數(shù)據(jù)。
高亮純文本數(shù)據(jù)的工具列表:
軟件包 | 流行度 | 大小 | 關(guān)鍵詞 | 說明 |
vim-runtime | V:18, I:399 | 36525 | 高亮 | 用 “:source $VIMRUNTIME/syntax/html.vim” Vim 宏命令轉(zhuǎn)化源代碼到 HTML |
cxref | V:0, I:0 | 1190 | c→html | 從 C 程序到 latex 和 HTML 的轉(zhuǎn)換器(C語言) |
src2tex | V:0, I:0 | 622 | 高亮 | 轉(zhuǎn)換許多源代碼到 TeX(C語言) |
source-highlight | V:0, I:5 | 2115 | 高亮 | 轉(zhuǎn)換源代碼到帶有高亮顯示的 HTML, XHTML, LaTeX, Texinfo, ANSI 顏色轉(zhuǎn)義序列和 DocBook 文件 (C++) |
highlight | V:0, I:5 | 1373 | 高亮 | 轉(zhuǎn)化許多源代碼到帶有高亮顯示的 HTML, XHTML, RTF, LaTeX, TeX or XSL-FO 文件。(C++) |
grc | V:0, I:5 | 208 | text→有顏色的 | 用于任何文本的通用顏色生成器 (Python) |
pandoc | V:8, I:45 | 194495 | text→any | 通用標(biāo)記轉(zhuǎn)化器 (Haskell) |
python3-docutils | V:13, I:51 | 1804 | text→any | 重構(gòu)文本文檔到 XML (Python) |
markdown | V:0, I:9 | 58 | text→html | Markdown 文本文檔到 (X)HTML (Perl) |
asciidoctor | V:0, I:7 | 98 | text→any | AsciiDoc 文本文檔格式化到 XML/HTML (Ruby) |
python3-sphinx | V:6, I:23 | 2755 | text→any | 基于文檔發(fā)布系統(tǒng) (Python)重構(gòu)文本 |
hugo | V:0, I:5 | 69551 | text→html | 基于 Markdown 的靜態(tài)站點發(fā)布系統(tǒng)(Go) |