C语言关于中文字符串的使用误区

C语言关于中文字符串的使用误区

背景

前几天在写c语言代码进行文件读写的时候,在处理文件中的中文诗句的过程中发现了c语言txt文本文件的中文读取到char数组中的一些不同寻常之处,因此做一个总结。

c语言汉字的存储方式和特点

以下是一段c语言代码,比较中文存储和英文字符存储可以清晰看到c语言中,中文占2个字节,英文字母占1个字节
C语言关于中文字符串的使用误区_第1张图片
在文件读取的时候,utf-8ANSI编码的中文读入到字符串的结果是不一样的。

UTF-8
C语言关于中文字符串的使用误区_第2张图片
ANSI
C语言关于中文字符串的使用误区_第3张图片
因此utf-8和ansi以及unicode对于中文汉子的编码方式是一样的,众所周知英文字母都是Ascall编码,但是上面三种是不一样的。

Unicode是一种国际通用编码,可以包含世界上所有的符号,但是,对于存储带来一些问题,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储,正如若每一个字符都占据4个字节,对于英文字母而言就造成了极大的浪费。

utf-8编码方式是一种使用最广泛的unicode编码的实现方式,UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

一下是更具体的知识去讲解编码
编码知识

一般c语言处理汉字时候要留意txt中文件的保存类型,博主一般是保存为ansi,占据两个字节,因此读出文件的字符需要进行分割是也是按照两位两位的方式去分割,而且当使用中文字符进行匹配的时候需要使用strcmp函数去做,因为中文占据两个字节,英文占据一个可以直接==去判断。

以下是自己分割古诗的一个实例
C语言关于中文字符串的使用误区_第4张图片
使用char one[3]数组去保存每次生成的一个汉字,赋值到新的数组里面,然后进行strcmp匹配中文标点进行分割古诗。
以上是我写代码过程的一些经验,欢迎各位留言指导。

你可能感兴趣的:(c语言,乱码)