1. linux下 cat查看了一个文件, 导致界面乱码,怎么办
应该是二进制文件里有些字符正好构成了指令,改变了系统的环境变量。
不需重起系统,只需退出当前终端,然后重新登录就可以了。
2. linux打开文件通用命令
鼠标双击根本就不是“通用”程序。鼠标双击是通过文件管理器识别被双击的文件属性,之后分别调用不同的程序来打开。
这个世界上目前我还没看到可以在命令行下面进行这种功能的程序。
不过你可以自己写一个,方法很简单。
file
命令可以识别文件类型,你写个脚本用这个返回类型进行区别调用即可。
用
gedit
请回图形界面。文件管理器就可以了。
PS:字符界面我建议用
nano
作为文件编辑器。不过有的系统默认不用,vi
和
nano
一般只保留一个。
再PS:你的
.c
文件
cat
是乱码?你的这个
.c
文件有问题,或者你的字符环境有问题,不是
cat
的问题。
3. linux下cat命令使用参数-v中文文件就变成乱码
这些其实一般是被处理过的UTF-8码。是什么码主要看该文档用什么编码存储的文本,一般默认为UTF-8码。
Linux对cat命令的详细解释为:
`-v'
`--show-nonprinting'
Display control characters except for LFD and TAB using `^'
notation and precede characters that have the high bit set with `M-'.
意思是:
用‘^’输出控制字符除了LFD和TAB
每个字节最高位为1的字符就用‘M-’替代每个字节的最高位(隐含的意思是一个字节的最高位为1的话就把最高位和低7位分离开来,并分别表示,最高位用‘M-’表示,低7位根据ASCII码表用对应的字符表示)
可以看出,这个-v是直接读取文件的字节来输出的,除了LFD、TAB和分隔符之外全部用以上规则输出。文件头部分的字节当然就忽略啦,因为文件头部分记录了该文本文件用什么编码存储,不是文本具体内容。
控制字符用‘^’的表示方法如下表(若读取到的字节属于控制字符的范围就认定为控制字符,即字节00000000~00011111):
例如(如果是以UTF-8码的形式存储):
汉字“文”,其UTF-8码为(十六进制):E6 96 87,二进制表示为:11100110,10010110,10000111;每个字节最高位都为1,所以每个字符前都带一个‘M-’;剩下的低7位为:01100110,00010110,00000111,对应的ASCII码字符为:f ^V ^G;依次连接起来后就是:
M-fM-^VM-^G
想验证可以这样:倒着来转换,先找出3个ASCII码字符,然后进行转换,转成3个二进制表示的字节,然后每个字节最高位置为1,然后再用UTF-8与Unicode之间的转换规则转成Unicode码,然后用字符映射表进行查找、验证,看是不是正确的字符。
“UTF-8与Unicode之间的转换规则”详见:http://blog.csdn.net/xiongxiao/article/details/3741731
不同的编码存储的字节是不一样的,例如:‘文’字,UTF-8码为E6 96 87,Unicode码为65 87,GBK码为CE C4。
4. 为什么在linux中用make之后生成的东西 用cat查看的时候会乱码
显示的问题,这个查看本来就是乱码,就想XP里面你去查看里面软件解压缩的包一样,给计算机看的。
5. linux下的文件名怎么是乱码的
如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。
查看编码的方法
方法一:file
filename
方法二:在Vim中可以直接查看文件编码
:set
fileencoding
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc
文件中添加以下内容:
set
encoding=utf-8
fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开
文件编码转换
多平台方法:
iconv
提供标准的程序和API来进行编码转换;
convert_encoding.py
基于python的文本文件转换工具;
decodeh.py
提供算法和模块来谈测字符的编码;
linux下文件编码转换:
方法一:
在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set
fileencoding=utf-8
或者
11)设置文件集合,即要对哪些文件进行操作,可以使用通配符,比如我通常是对
C/C++
源程序进行编码转换
:args
*.h
*.cpp
2)给出要在每个文件上执行的命令,这里是转换编码:
:argdo
set
fenc=utf-8
|
update
方法二:
iconv
转换
5.案例:
假如说我们将windows下的一个UTF-8的文件传到linux环境下,linux环境下的系统编码是GB18030,我们cat的时候就会出现乱码,这个时候就应该想到转码了,下面我们来进行试验:
我们将windows下一个名为UTF-8.sh的文件传到linux系统中,其中UTF-8.sh的内容如下:
我是中文编码UTF-8模式~
而linux系统的系统语言设置为:
[root@sor-sys
zy]#
cat
/etc/sysconfig/i18n
LANG=zh_CN.GB18030
SYSFONT="latarcyrheb-sun16"
这个时候查看一下文件的内容及编码:
[root@sor-sys
zy]#
file
UTF-8.sh
UTF-8.sh:
UTF-8
Unicode
text,
with
no
line
terminators
[root@sor-sys
zy]#
cat
UTF-8.sh
锘挎垜鏄?腑鏂囩紪镰乁TF-8妯″纺~[root@sor-sys
zy]#
[root@sor-sys
zy]#
这个时候我们就需要转换编码了,记得使用iconv
[root@sor-sys
zy]#
iconv
-f
UTF-8
-t
GB18030
UTF-8.sh
-o
GB18030.sh
[root@sor-sys
zy]#
cat
GB18030.sh
??我是中文编码UTF-8模式~[root@sor-sys
zy]#
[root@sor-sys
zy]#
file
GB18030.sh
GB18030.sh:
Non-ISO
extended-ASCII
text,
with
no
line
terminators
[root@sor-sys
zy]#
convmv就是更改文件名编码方式的一个工具。
比如
sudo
convmv
-f
gbk
-t
utf-8
-r
–notest
/home
就是将/home目录下原来文件名是gbk编码方式的全部改为utf-8格式的。这里
-f
后面为原来的编码方式,-t
后面是要更改为的编码方式,
-r
表示这个目录下面的所有文件,
–notest
表示马上执行,而不是仅仅测试而已。另外这命令好像要root才能执行,因此要加上
sudo。
6. linux系统中命令行敲进去cat /usr/share/terminfo/l/linux 后出现乱码无法恢复
他是一个二进制文件,用cat 看肯定是乱码,用ctrl+c 结束就行了。
7. jfreechart,windows下中文显示正常,linux下乱码.在线等。。。急急急!!
初入linux的程序员们,经常会受到乱码的问候。可谓“始乱终弃”。因为乱码,并且最终放弃了linux的不在少数。好吧,言归正传,先看看各类乱码是怎么形成的。
中文字符乱码
这种情况一般是安装了中文控制端,但没有启用中文应用造成的。只需要启动相应软件即可,如zhcon。或者是启用了相应软件,但字符集不对,需设置相应字符集,例如export LANG=zh_CN.UTF-8
ORACLE安装界面乱码
虽说ORACLE支持多国语言,会根据环境变量自动选择字符集,但中文安装好像还有问题,不过10.2以后的版本好像没有该问题了,具体可以执行命令export LANG=en_US来设置为英文字符集环境
英文字符乱码
一般该字符乱码多出现在cat了二进制的文件时,因为二进制文件中多有控制码,会导致终端界面乱码,通常解决方法是用reset终端复位命令解决问题
其他伪终端乱码
有时是通过SSH进入远程LINUX服务器时,cat一个core文件,并且用reset命令都不能成功,怎么办?很简单,看以下试验,首先cat一个python的编译文件
oracle@linux-suse:~> cat fibo.pyc
m?
{?鲱c@sd
Zd
ZdS(cCs:d\}}x'||jo|G|||}}qWdS(Nii(ii(tatbtn(RRR((tfibo.pytfibs
cCsIg}d\}}x0||jo"|i||||}}qW|S(Nii(ii(tresultRRRtappend(RRRR((Rtfib2 s
N(RR(RR((Rt?s oracle@linux-suse:~> VT102VT102
\-bash: VT102VT102: command not found
oracle@linux-suse:~>
在SSH终端上看到是的乱码,提示符都是乱的,可以用以下命令恢复
oracle@linux-suse:~> tput sgr0
乱码问题产生的原因是SSH的问题,因为在其他终端下,cat用样一个文件,不会产生乱码,于是试验乱码产生的原因
oracle@linux-suse:~> ^N
只要用ctrl+v,ctrl+n就使用屏幕乱码,当然恢复后再试验
oracle@linux-suse:~> echo -e '\xe'
屏幕再次乱码,好,再恢复
oracle@linux-suse:~> echo -e '\xf'
以上是需要盲打的,因为屏上看到的是乱码,最终问题产生的原因是十六进制字符E产生的,解决也很简单,十六进制字符F即可。
我在蓝色理想里看到的 希望帮到你