当我们在使用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文档的更多相关文章

  1. 在Firefox中发现一个在Linux下查看chm文档的插件

    在Firefox浏览器插件中搜索插件chmfox插件,安装后就可以在linux下通过Firefox浏览器阅读chm文档了.

  2. Linux下查看目录文件数和文件大小

    一.查看当前目录下文件个数 在linux下查看目录下有多少文件可以用:ls -l  命令查看,ls -lR 递归查看所有目录, 如果文件很多,则用wc命令 和 grep 命令进行过滤. wc命令显示输 ...

  3. linux下如何编辑txt文档

    利用vi命令 [root@bogon a]# vi a.txt   打开a.txt文档 vi a.txt后,键盘敲i,可以进入编辑模式, 输入完内容后按ESC键,键盘输入  :wq   可以保存并退出 ...

  4. Linux下查看某个进程打开的文件数-losf工具常用参数介绍

    Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...

  5. ubuntu打开windows下txt文档乱码问题的解决

    昨天晚上安装了Ubuntu11.10,打开TXT文件的时候发现中文乱码问题,在网上查了一下,一些网友提供了下面的方法: “按Alt+F2,打开“运行应用程序”对话框,输入“gconf-editor”, ...

  6. 安装的Android SDK下无doc文件夹问题 以及关联Android帮助文档和查看文档 以及查看在线文档

    参考连接:https://blog.csdn.net/fangzicheng/article/details/78344521 https://jingyan.baidu.com/article/29 ...

  7. Linux 笔记 - 第八章 文档的打包与压缩

    博客地址:http://www.moonxy.com 一.前言 在 Linux 系统中,文件的后缀名没有实际的意义,加或者不加都无所谓.但是为了便于区分,我们习惯在定义文件名时加一个后缀名,比如常见的 ...

  8. linux下查看和添加PATH环境变量

    linux下查看和添加PATH环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 编辑你的 PA ...

  9. Linux 下查看文件字符编码和转换编码

    Linux 下查看文件字符编码和转换编码 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linu ...

随机推荐

  1. iOS开发——循环遍历的比较

    常用的有for in.for循环.EnumerateObjectsUsingBlock 1.小规模的数据无所谓,但是对大量数据,for in 的遍历速度非常之快,不是for循环能比的: 2.对于数组, ...

  2. 【jQuery05】通过按键 来切换 class

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. vue-lazyload插件

    更详细的内容,请移步 使用 npm install vue-lazyload --save //注册插件 import vueLazyload from 'vue-lazyload' Vue.use( ...

  4. Hadoop Serialization -- hadoop序列化具体解释 (2)【Text,BytesWritable,NullWritable】

    回想: 回想序列化,事实上原书的结构非常清晰,我截图给出书中的章节结构: 序列化最基本的,最底层的是实现writable接口,wiritable规定读和写的游戏规则 (void write(DataO ...

  5. zzulioj--1822--水水更健康(水题)

    1822: 水水更健康 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 49  Solved: 19 SubmitStatusWeb Board Des ...

  6. react --- 路由传参的几种方式

    1.params 优势 : 刷新地址栏,参数依然存在缺点:只能传字符串,并且,如果传的值太多的话,url会变得长而丑陋. 2.query 优势:传参优雅,传递参数可传对象:缺点:刷新地址栏,参数丢失 ...

  7. 线程1—Thread

    随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...

  8. IHttpHandler的学习(0)

    本片文章转自网络 问题1:什么是HttpHandler?(Handler:处理者:那就是对Http请求的处理拉) 问题2:什么是HttpModule? 问题3:什么时候应该使用HttpHandler什 ...

  9. PostgreSQL源代码中插件的使用

    如果编译数据库时使用了gmake world和gmake install-world, 所有的插件都会被安装, 那么就不需要再次安装了. 插件目录 contrib 进入要安装的插件目录, 例如 cd ...

  10. js相关禁止

    遇到网页上有精美图片或者精彩文字想保存时,通常大家都是选中目标后按鼠标右键,在弹出菜单中选择“图片另存为”或“复制”来达到我们的目的.但是,目前有许多网页都屏蔽了鼠标右键,那么用js如何实现禁止鼠标右 ...