1. 程式人生 > >Linux下檢視txt文件

Linux下檢視txt文件

        當我們在使用Window作業系統的時候,可能使用最多的文字格式就是txt了,但是當我們將Window平臺下的txt文字文件拷貝到Linux平臺下檢視時,發現原來的中文全部變成了亂碼。沒錯, 引起這個結果的原因就是兩個平臺下,編輯器對預設的編碼格式是不一樣的:

在Window平臺下,Notepad的預設編碼是ASCII碼或者GBK,而在Linux平臺下預設的是UTF-8(中文環境的情況),編碼的不同導致了原來文件中的中文變成了亂碼。

解決辦法:
使用iconv命令將文件的編碼進行轉換即可。

iconv預設情況下,是沒有被安裝的,下面簡單介紹下iconv的安裝過程:
1. 下載:
http://www.gnu.org/software/libiconv/#TOCdownloading

2. 安裝:
下載完成後,切換到下載目錄先進行解壓:
$tar -xzvf libiconv-1.14.tar.gz

然後進入解壓後的檔案中

$cd libiconv-1.14_2
檢視其中的README檔案,我們可以看到安裝步驟:(當然,如果您熟悉原始碼的安裝,這步完全可以省略^-^)
$ ./configure --prefix=/usr/local
$ make
$ make install

3. 命令學習
該工具安裝完成後,肯定要先了解下這個命令的用法吧,這個沒什麼可說的:
$iconv --help
我們會看到下面的內容:
Usage: iconv [OPTION...] [FILE...]
Convert encoding of given files from one encoding to another.

 Input/Output format specification:
  -f, --from-code=NAME       encoding of original text
  -t, --to-code=NAME         encoding for output

 Information:
  -l, --list                 list all known coded character sets

 Output control:
  -c                         omit invalid characters from output
  -o, --output=FILE          output file
  -s, --silent               suppress warnings
      --verbose              print progress information

  -?, --help                 Give this help list
      --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
說的很明白,就是按照下面的格式進行轉換:
iconv -f 原編碼 -t 目標編碼 要轉換的檔案

4. 編碼轉換:
學會了編碼的轉化,我們就舉了例子示範一下:
$iconv -f gbk -t utf8 test.txt
命令執行完成後,你發現原來test.txt中的中文正常顯示了,但是開啟原來的檔案,卻發現還是亂碼,這個Easy,我們將輸出的內容輸入到檔案中即可。
$iconv -f gbk -t utf8 test.txt -o test
或者執行下面的命令:
$iconv -f gbk -t utf8 test.txt < test
此時我們開啟這個test檔案就會發現,原來的中文顯示正常了^-^

注意:
如果不出意外的話,上面的安裝步驟可沒有那麼順利,在make的時候,會提示下面的錯誤:
n file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
 ^
make[2]: *** [progname.o] Error 1
make[2]: Leaving directory `/home/freeman/Downloads/libiconv-1.14_2/srclib'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/freeman/Downloads/libiconv-1.14_2/srclib'
make: *** [all] Error 2
這個這個軟體本身存在的一個Bug,通過Google,發現一個解決該問題的補丁,內容如下:
--- srclib/stdio.in.h.orig      2011-08-07 16:42:06.000000000 +0300
+++ srclib/stdio.in.h   2013-01-10 15:53:03.000000000 +0200
@@ -695,7 +695,9 @@
 /* It is very rare that the developer ever has full control of stdin,
    so any use of gets warrants an unconditional warning.  Assume it is
    always declared, since it is required by C89.  */
-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
+ _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
 #endif
PS:內容中的"+"表示新增的內容,"-"表示刪除的內容!

那我們只要進行如下操作即可解決這個問題:
1. 切換到srclib目錄下:
$cd srclib

2. 修改stdio.in.h檔案:

$gedit stdio.in.h
通過搜尋,定位到_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");這一行,然後在這一行的前後加上條件編譯即可,修改後的內容如下:
#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
        _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif

3. 儲存退出,然後再進行make, make install便可順利安裝^-^

參考資料:http://forum.z27315.com/topic/15662-%E8%A7%A3%E5%86%B3%E7%BC%96%E8%AF%91libiconv%E6%97%B6%E7%9A%84gets-undeclared-here%E9%94%99%E8%AF%AF/

相關推薦

Linux檢視txt

        當我們在使用Window作業系統的時候,可能使用最多的文字格式就是txt了,但是當我們將Window平臺下的txt文字文件拷貝到Linux平臺下檢視時,發現原來的中文全部變成了亂碼。沒錯, 引起這個結果的原因就是兩個平臺下,編輯器對預設的編碼格式是不一樣的:

Linux幾種傳輸命令

其他 對待 的人 spa quit 配置 delete compute 服務器 Linux下幾種文件傳輸命令 sz rz sftp scp 最近在部署系統時接觸了一些文件傳輸命令,分別做一下簡單記錄: 1.sftp Secure Ftp 是一個基於SSH安全協議的文件傳輸管

linuxC獲取的大小

錯誤代碼 返回 system sys string 文件系統 識別碼 連接 chm 獲取文件大小這裏有兩種方法: 方法一、 範例: unsigned long get_file_size(const char *path) { unsigned lo

Linux查看編碼及修改編碼

tar enca strong lin help 添加 解決 讀取 列表 查看文件編碼在Linux中查看文件編碼可以通過以下幾種方式:1.在Vim中可以直接查看文件編碼:set fileencoding即可顯示文件編碼格式。如果你只是想查看其它編碼格式的文件或者想解決用Vi

linux拷貝隱藏

home pop fig linux net conf sysconfig strong class 1、拷貝隱藏文件 把/home/u文件夾中的全部文件(包含隱藏文件)拷貝到/home/user1中 cp -a /home/u/. /hom

Linux批量修改名(rename)

批量修改 rename1.rename命令批量修改文件名, 其實Linux下可以使用別的辦法來批量修改文件名, 不過rename實在太方便了比如把所有的表為cdb1_* 修改為cdb_*的在本目錄下只需要# rename ‘cdb1‘ ‘cdb‘ *以前都是寫個for循環來做...想想多傻啊, 呵呵ren

Linux搜索命令whereis/which/find/locate

interface 進行 指定 轉義 exp -m 變量 -c usr 1.whereis whereis who whereis 只能搜索二進制文件(-b),man 幫助文件(-m)和源代碼文件(-s) 2.locate 所以有時候你剛添加的文件,它可能會找不到,需要手動

Linux修改.bash_profile 改變PATH變量的值

oot 兩個 超級用戶 pat 設置 inux 需要 其中 lin Linux中含有兩個重要的文件 /etc/profile和$HOME/.bash_profile 每當系統登陸時都要讀取這兩個文件,用來初始化系統所用到的變量,其中/etc/profile是超級用戶所用,$

linuxNginx配置(nginx.conf)配置設置詳解(windows用phpstudy集成)

兩個 response 機制 .so 不用 filename 發送 php文件 code linux備份nginx.conf文件舉例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-2017111

Linux的.so是動態鏈接庫

share 調用 鏈接 而不是 可執行文件 有一個 compile 運行 .dll Linux下的.so是基於Linux下的動態鏈接,其功能和作用類似與windows下.dll文件。 通常情況下,對函數庫的鏈接是放在編譯時期(compile time)完成的。所有相關的對象

Linux查看內容的命令

root when app system 參數 一起 調用 effect moni 查看文件內容的命令: cat 由第一行開始顯示內容,並將所有內容輸出 tac 從最後一行倒序顯示內容,並將所有內容輸出 more 根據窗口大小,一頁一頁的現實文件內容

Linux批量替換內容和文名(轉)

lan 其中 xargs ava 提取 pat 內容 文件內容 nbsp 1、批量替換指定多個文件的文件內容 在指定目錄/your/path裏,查找包含old_string字符串的所有文件,並用new_string字符串替換old_string字符串。 sed -i

【驚雷】LinuxRsync的同步的配置過程

cti daemon 修改 測試的 傳輸文件 一個 -- iptable 勞動力 Rsync的文件同步實現 一、rsync 簡介 Rsync(remote synchronize)是一個遠程數據同步工具,簡要的概括就是主機於主機之間的文件目錄數據的一個同步。

linux的find查找命令與grep內容查找命令

option 計數 user 用戶 org emp find命令 gpo .html 在使用linux時,經常需要進行文件查找。其中查找的命令主要有find和grep。兩個命令是有區的。   區別:(1)find命令是根據文件的屬性進行查找,如文件名,文件大小,所有者,所屬

Linux查看和文夾大小

du -sh 查看分區 logs linu 目錄 inux 命令 刪除 文件的 當磁盤大小超過標準時會有報警提示,這時如果掌握df和du命令是非常明智的選擇。 df可以查看一級文件夾大小、使用比例、檔案系統及其掛入點,但對文件卻無能為力。 du可以查看文件及文件夾的大小。

linux 查看的完整時間信息及三種時間屬性

hang nod conda strong 進程 腳本 acc modify 目錄 一、linux下查看文件的完整時間信息1、Linux 下查看文件時,ls –l 缺省是不顯示秒的:# ls -l /etc/ total 0 -rw-r--r--. 1 root ro

Linux搭建SMB共享服務,Linux/Windows互聯互通

出現 lan 分別是 接下來 linux下 server 需要 init.d main 一丶簡介:SMB協議是建立在NetBIOS協議之上的應用協議,是基於TCP138、139兩個端口的服務,NetBIOS出現之後,Microsoft就使用NetBIOS實現了一個網絡文件/

linux的標準

uil 描述符 () 系統數據 literal atime 狀態 ring file linux下的標準文件庫 查詢文件屬性 頭文件 <sys/types.h> <sys/stat.h> 函數 int stat(const char *filen

Linux批量修改夾所有者及權限

批量修改 修改文件 topic 文件 lan xid href sta chm Linux下批量修改文件及文件夾所有者及權限需要使用到兩個命令,chmod以及chown 例:對/opt/Oracle/目錄下的所有文件與子目錄執行相同的權限變更: chmod -R 700 /

linux查找

spa body bsp gpo 文件 grep post fin type 查詢l文件名為test.txt的文件 find / -name test.txt 從根目錄開始查找文件名為“.php”的文件,並找出包含“test”的行 find / -t