加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

关于编码

发布时间:2022-11-03 12:51:40 所属栏目:Linux 来源:
导读:  这几天郁闷倒了,总是要弄编码相关的东西。本来以为在linux应该很少接触这些才对,事与愿违啊。记得入职时,编码的讲座去听了两遍,然后到用的时候,发现还是很多地方不明白。基本的概念就不写了,随便一搜就出来
  这几天郁闷倒了,总是要弄编码相关的东西。本来以为在linux应该很少接触这些才对,事与愿违啊。记得入职时,编码的讲座去听了两遍,然后到用的时候,发现还是很多地方不明白。基本的概念就不写了,随便一搜就出来了,例如unicode, ascii, ansi, gb2312……自己在网上查了很多资料,但是有很多没几个讲明白的,自己总结一下。
 
  1.关于windows和linux下unicode表示的不同
 
  windows下,用双字节表示unicode,linux用4个字节表示,即wchar_t在windows下2字节,linux下4字节,学术用语就是UCS-2和UCS-4。那他们之间怎么转换呢?直接强转就OK。因为目前UCS-4编码,还没有任何字符分配在UCS-2范围之外。
 
  2.关于ANSI编码(MultiByte)和unicode
 
  ANSI编码是为不同的国家和地区制定的不同标准,例如在简体中文系统下,ANSI 编码代表GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。以汉语为例,在ascii和中文同时存在于一段ANSI文本中,ascii中字符(0x00~0x7F)只占1个字节,汉字占2个字节(以GB2312编码)。但是当一段中文和日语同时存在ANSI文本中,(中文系统中)日语部分就会无法正常显示,因为会根据操作系统当前的语言进行显示。
 
  关于和unicode的转换
 
  在windows下,可以用MultiByteToWideChar和WideCharToMultiByte,使用时要指定codepage,对于ANSI,指定为CP_ACP即可,会根据系统的语言来进行转换。不是搞windows的,就不多说了。
 
  在linux下,可以用mbstowcs和wcstombs来实现。但是需要我们明确的告诉他要转换的字符语言,可以用setlocale来指定,网上都说这样就可以了:setlocale(LC_ALL, "chs")。但是在我测试的机器上需要这样:setlocale(LC_ALL, "zh_CN")。可以判断返回值来确定是否成功,为NULL的时候就是失败,否则返回字符串,例如 "zh_CN"。机器支持的语言类型,可以用locale命令来查询。
 
  3.发现个地方,windows的txt文档采用的unicode编码方式linux编码,前两个字节是用来表示字节序的。用ultraedit查看时,开始一直以为转码错误了,擦。以后把txt放到linux下的话,得注意这点。
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!