有关linux中文字符显示,只涉及纯文本。

1.字符正常显示需要具备两个条件,首先是原始文档编辑时采用字符集A,然后是阅读文档也采用对应的字符集进行阅读。
无论是在什么操作系统上,只要满足这个原则,应该就不会出现乱码。
2.当前常用的字符集合,ASCII,ISO-8895,GBK,BIG5,UNICODE,UTF-8。

  • 在linux BASH 上使用man ascii可以显示字符全集。其实只使用了1个BYTE中的后7个bit,所以能表示127个含义。其中从32~126为英文可视字符集合(含标点符号)。
  • 但西方国家还有很多字母和英文字符长得是不一样的,比如俄语,法语,德语等。那么就利用1个BYTE中除了ASCII码使用的7个bits外剩余的1个bit。我们用来表示其他语系的字符。这就是ISO-8895编码,可以看出,这种编码和ASCII是兼容的,并不冲突。ubuntu BASH程序设置字符集仅仅多了1个bit,可以表示的信息量也仅仅是扩大了一倍,显然不能包含其他全部字符集合,从上图我们可以看到UBUNTU的终端软件提供了让你选择对应字符集的方法,ISO-8859对于不同的语系采用了不同的编号。操作系统通常预先包含全部字符集,你在安装的时候通过设置来选择支持方式。但对于中文支持的时候不同的操作系统默认的编码有些不同。由于中文编码种类不唯一,有繁体的BIG5,简体的也有GBK,和UTF。我们在使用时的设置也有可能造成我们在当前系统,当前编辑工具下正常显示的中文,在另一个系统或另一个编辑工具中显示为乱码。
  • BIG5 是双字节编码,为中文繁体
  • GBK2312为双字节编码,为中文简体
  • GBK为双字节编码,能同时支持简繁体
    -上面这些编码都是兼容ASCII以及ISO8859的。为了统一,达到简化目的,出现了UNICODE编码,各种编码都支持,也是定长的,但和前面编码都不兼容。
  • 由于用定长2字节表示英文等西方体系的字符显得浪费,在UNICODE基础上又推出了变长的UTF再编码。从1到6个字节不等,汉字采用3个字节,由此可见,**UTF和GBK是不兼容的。**可以理解为当前UNICODE就是UTF
  1. 当我们在打开某文档时,如果发现中文乱码,按照1所说,我们应该确定2件事,首先原来的汉字采用什么编码,然后是你的编辑器使用的是编码。
    在linux中,我们可以使用file命令查看文件类型,但是包含中文的就查不出来其中中文的编码方式。比如下面这些C代码,我们只能看到是ISO-8859编码,中文不知道。
eqList.h:   C source, ISO-8859 text, with CRLF line terminators
2-2 SeqList.c:   ISO-8859 text, with CRLF line terminators
2-4 ChainList.h: C source, ISO-8859 text, with CRLF line terminators
2-5 ChainList.c: C source, ISO-8859 text, with CRLF line terminators

我们可以通过hexdump命令查询特性位置的汉字占用的字节数来确定,如果是2字节,就是GBK,如果是3字节,就是UTF。
在这里插入图片描述这种问题通常发生在windows系统和linux系统传递文件造成的,通常windows的汉字采用GBK编码,而linux采用UTF编码。所以我们通常不用这么麻烦,出现乱码了,就查询你当前编辑工具使用的编码。把文件格式转换过来就可以了。
4.由于linux中文版采用的是UTF编码,所以内部帮助,命令提示等等中文相关都是UTF格式,我们虽然可以简单将终端软件的文字编码选取为GBK格式,但会造成使用终端时出现命令提示乱码的问题。这个时候,我们需要转换文件格式。
iconv -f gbk -t utf-8 guzi.c -o guzi.c。注意,我们这里使用原文件格式的不是iso-8859。而是gbk。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值