汉字编码

汉字编码


一、汉字所占的字节数

对于一个字符串sizeof("请放手"),结果值是4。测试操作系统:Centos 6.4,硬件平台:Windows 7 32位 + VirtualBox 4.3.12。看来用sizeof()来计算汉字所占用的字节或空间是不准确的。
strlen("请放手"),返回值是9。

二、汉字编码问题

在使用libxml2输出的时候,出现了占用空间不一致的问题。
读出的汉字用的是3位UTF-8编码,在另外一个系统中用的是2位GB2312编码。
比如:GB2312 Unicode UTF-8值分别对应于

GB2312UnicodeUTF-8
BABA6C49E6B189

见:GB2312 to UTF-8 - Row 26: 0xBAA1 to 0xBAFE '汉'
在对提取的汉字进行显示的时候,尤其是系统对编码的支持有限定要求的时候,需要确定字符的编码格式,否则出来的全部都是乱码。

三、GB2312与UTF-8的转换

REFER:汉字编码对照表(gb2312/unicode/utf8) 【转帖】
REFER:吴剑: UTF-8, Unicode, GB2312格式串转换之C语言版
REFER:GNU libiconv

四、VIM汉字编码与显示问题)

Note:在VIM中输入汉字的小技巧,当文件的fileencoding/编码格式是UTF-8的时候,如果没有汉语拼音输入法,输入汉字可以用一种新的方法,那就是CTRL+q+u+xxxx,其中xxxx是汉字的Unicode编码,不是UTF-8编码。

1、常用的汉字编码
①GB2312
GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。可以用繁体汉字测试某些系统是不是只支持GB2312编码。
②GBK
GBK编码是 GB2312 编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有C-J-K汉字。同 GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。GBK还收录了GB2312不包含的 汉字部首符号、竖排标点符号等字符。
③CP936
④EUC_CN
Extended Unix Code (EUC) is a multibyte character encoding system used primarily for Japanese, Korean, and simplified Chinese.
⑤GB18030
GB18030编码向下兼容GBK和GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相同。GB18030收录了所有Unicode3.1中的字符,包括中国少数民族字符,GBK不支持的韩文字符等等,也可以说是世界大多民族的文字符号都被收录在内。
GBK和GB2312都是双字节等宽编码,如果算上和ASCII兼容所支持的单字节,也可以理解为是单字节和双字节混合的变长编码。

2、理解几个概念

①. termencodingEncoding used for **the terminal**. This specifies what character encoding the keyboard produces and the display will understand. For the GUI it only applies to the keyboard. 
终端使用的编码方式,指定了键盘输出的编码格式和屏幕能够正常显示的编码方式②. encodingSets the character encoding used inside Vim. It applies to text in the buffers, registers, Strings in expressions, text stored in the vim info file, etc. Changing this option will not change the encoding of the existing text in vim. The character encoding of files can be different from **encoding**. This is specified with **file encoding**. The conversion is done with iconv() or as specified with ‘charconvert'
encoding适用于vim的内部缓存、寄存器、字符串、vim info 文本等的编码方式。改变encoding,不会改变vim中当前文件的编码格式。文件的编码由fileencoding来指定,与 encoding 不一样。可以通过iconv()或'charconver'来转换。
如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,例如UTF8,以免影响正常工作。③. fileencodingSets the character encoding for the file of this buffer. When 'file encoding' is different from 'encoding', conversion will be done when reading and writing the file.
文件自身的编码方式。如果fileencoding和encoding不一致,那么在读取和写入文件时,会对编码方式进行转换。
通过打开文件后设置 fileencoding,我们可以将文件由一种编码转换为另一种编码④. fileencodingsThis is a list of character encodings considered when starting to edit an existing file. When a file is read, Vim tries to use the first mentioned character encoding. If an error is detected, the next one in the list is tried. When an encoding is found that works, 'file encoding' is set to it. If all fail, 'file encoding' is set to an empty string, which means the value of 'encoding' is used.
Note that 'fileencodings' is not used for a new file, the global value of 'file encoding' is used instead.
是一个字符编码的列表。当vim打开一个文件时,会尝试使用列表中的第一个字符编码方式。如果检测到错误,就用列表中的下一个。当找到一个可以正常工作的字符编码方式后,file encoding就被设置成找到的字符编码方式。如果最后都失败了,fileencoding就被设置成空的,这意味者字符的编码方式就跟 encoding变量的值一样了。这样通过这个列表,Vim可以自动判断文件的编码,自动判断失败时还可手动设定 fileencoding 来指定编码。因此,设置 fileencodings 的时候,一定要把要求严格的、当文件不是这个编码的时候更容易出现解码失败的编码方式放在前面,把宽松的编码方式放在后面。

假如encodingfileencoding不匹配,比如encoding=utf-8,但是fileencoding=big5,则在保存文件的时候会提示:E513 write error conver.

REFER:shell和vim中乱码原因及消除办法
REFER:Vim 编码/Coding

五、让Linux Bash显示多种汉字编码方案

1、显示当前的编码方案
env | grep LANG
2、list系统支持的、所有的编码方案

参考:


1、Python libxml2 parsing xml having Chinese characters
2、GB2312与UTF-8对照表
3、shell和vim中乱码原因及消除办法
4、Software Developer Must Know About Unicode and Character Sets
Please do not write another line of code until you finish reading this article.
5、CJKV Information Processing: CJKV Computing
6、
7、Vim and unicode keybindings: math, IPA, and more

转载于:https://www.cnblogs.com/xuanyuanchen/p/5844567.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Noise噪音halcon算子,持续更新

目录add_noise_distributionadd_noise_whitegauss_distributionnoise_distribution_meansp_distributionadd_noise_distribution 功能:向一个图像添加噪声。 add_noise_white 功能:向一个图像添加噪声。 gauss_distribution 功能:产生一…

sublime text3 package control 报错

安装sublime text3之后,安装package control 报错,错误信息:There are no packages available for installation 根据提示,找到错误解决办法:https://packagecontrol.io/doc... 其实意思就是你的电脑代理出了问题&…

HTML图片元素(标记)

<html> <head> <title>第一个网页</title> </head> <body> ***************图片元素******************</br> <img srcmm.jpg /> </body> </html> 新建一个文件夹“text”,在text文件夹内新建index.html并放入一张…

Optical-Flow光流halcon算子,持续更新

目录optical_flow_mgunwarp_image_vector_fieldvector_field_lengthderivate_vector_fieldoptical_flow_mg 功能&#xff1a;计算两个图像之间的光流。 unwarp_image_vector_field 功能&#xff1a;使用一个矢量场来展开一个图像。 vector_field_length 功能&#xff1a;计…

Oracle中procedure和function创建举例

Procedure创建与执行&#xff1a;Case1&#xff1a; create or replace procedure procedure_name(id user.table_name.columne_name%type)is begin delete from user.table_name where columne_nameid;exception when others then dbms_output.put_line(errors);end&#xff1…

Liunx 中tr的用法

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中cat /etc/issue |tr a-z A-Z > /tmp/issue.out2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中who | tr a-z A-Z >> who.out3、一个linux用户给root发邮件&#xff0c;要who求邮…

ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)

主要更新&#xff1a; 1&#xff1a;升级处理机制&#xff08;js请求由同步变更为异步&#xff09; 2&#xff1a;优化前端JS&#xff1a;包括API和配置方式。 3&#xff1a;增加InputDialog功能。 4&#xff1a;增远远程验证功能。 5&#xff1a;优化权限安全机制。 6&#xf…

多线程并发之原子性(六)

最近在网上找到好多的多线程关于原子性的例子&#xff0c;说的都不是非常的明确&#xff0c;对于刚学习多线程的新手而言很容误导学员&#xff0c;在这里&#xff0c;我通过多个例子对多线程的原子性加以说明。 例子一&#xff1a;传统技术自增 package face.thread.volatilep;…

Points角点halcon算子,持续更新

目录corner_responsedots_imagepoints_foerstnerpoints_harrispoints_harris_binomialpoints_lepetitpoints_sojkacorner_response 功能&#xff1a;在图像中寻找角点。 dots_image 功能&#xff1a;在一个图像中增强圆形点。 points_foerstner 功能&#xff1a;使用Frstn…

预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

当 Visual C 项目启用了预编译头 (Precompiled header) 功能时&#xff0c;如果项目中同时混合有 .c 和 .cpp 源文件&#xff0c;则可能收到 C1853 编译器错误&#xff1a;fatal error C1853: pjtname.pch precompiled header file is from a previous version of the compiler…

甲骨文称 Java 序列化的存在是个错误,计划删除

甲骨文计划从 Java 中去除序列化功能&#xff0c;因其在安全方面一直是一个棘手的问题。 Java 序列化也称为 Java 对象序列化&#xff0c;该功能用于将对象编码为字节流...Oracle 的 Java 平台小组的首席架构师 Mark Reinhold 说&#xff1a;“删除序列化是一个长期目标&#x…

CreateProcess

Windows 进程创建完整过程&#xff08;除去细节&#xff09; 当前流程是分析WinXP x86得到的&#xff0c;在最新版本Windows上不一定正确&#xff0c;但是可以做一个参考&#xff0c; 由于我这里符号并不全&#xff0c;所以导致我这里有些东西看到的可能是错误的&#xff0c;误…

系统:Centos 7.2 内核3.10.0-327.el7.x86_64 # 内核需要高于2.6.32

系统&#xff1a;Centos 7.2 内核3.10.0-327.el7.x86_64 # 内核需要高于2.6.32 Drbd : 192.168.8.111&#xff1a;node1/dev/drdb0 /mydeta 192.168.8.112 : node2Mysql_vip: 192.168.8.200 #下章实现 # 需要的软件包&#xff1a;mariadb-5.5.53-linux-i686.tar.gzdrbd84-utils…

Smoothing滤波处理halcon算子,持续更新

目录anisotropic_diffusionbilateral_filterbinomial_filtereliminate_min_maxeliminate_spfill_interlacegauss_filterguided_filterinfo_smoothisotropic_diffusionmean_imagemean_nmean_spmedian_imagemedian_rectmedian_separate_median_weightedmidrange_imagerank_imager…

日志文件在VS中输出为乱码问题

原因&#xff1a;主要是文件文字格式问题&#xff08;使用使用 Unicode 字符集&#xff09;&#xff1a;修改项目/属性/常规/字符集/ 未设置

初学者电脑编程入门

1、首先要对编程有个比较大概的了解&#xff0c;编程的对象&#xff0c;编程的原理&#xff0c;编程的目的等等。2、在了解编程基本知识后&#xff0c;要想想自己学习编程后到底要干什么以确定学习的方向。比如说是想要开发手机app&#xff0c;网站开发&#xff0c;企业系统等。…

MVC架构模式(2)

简介&#xff1a; MVC最初是在Smaltalk_80中被用来构建用户界面的。M代表模型Model&#xff0c;V代表视图View&#xff0c;C代表控制器Controller。 Model模型层&#xff0c;可以简单理解就是数据层&#xff0c;用于提供数据。在项目中&#xff0c;&#xff08;简单理解&#x…

Scene Flow场景流halcon算子,持续更新

目录scene_flow_calibscene_flow_uncalibscene_flow_calib 功能&#xff1a;计算两个立体图像对之间校准的场景流。 scene_flow_uncalib 功能&#xff1a;计算两个立体图像对之间未校准的场景流。

ios学习之旅---指针也不难

1、认识指针#include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x x 2; //} void test() {// 确定当前坐标int x 20;int y 150;printf("%p\n",&x);printf("%lu\n",&x);*((int *)(0…

FFmpeg中MPEG-4编码程序追踪,其他FFMPEG自带编码器同理

FFmpeg中与MPEG-4编码相关的主要文件有mpegvideo.c&#xff0c;h263.c等。在mpegvideo.c中&#xff0c; AVCodec mpeg4_encoder { "mpeg4", CODEC_TYPE_VIDEO, CODEC_ID_MPEG4, sizeof(MpegEncContext), MPV_encode_init, MPV_encode_picture, …