今天和大家分享下如何遍历中文字符串,主要是如何打印中文字符,因为中文字符串每个字符占用不只一个字节的空间,如果我们逐个字节遍历,会出现奇怪的结果。而UTF-8编码写的中文字符是有特定结构的,我们可以按照它的规则去遍历打印。
下面是详情:
前提:UTF-8编码。
先看下面的代码和运行结果:
上面代码定义了一个9个中文的字符串,但打印size确是27,挨个字符遍历也都是�。
这个本质是因为中文不只占用一个字节的空间,换一种方式遍历:
因为一个中文字符不一定占用几个字节,但它们的长度其实可以从字符的头中读取出来,这点可以查看UTF-8的Wiki介绍:https://en.wikipedia.org/wiki/UTF-8#Description
这里可以看到,通过Byte1的前4位就可以区分出这个字符究竟占用几个字节,所以就有了上述的遍历方式。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
编码
+关注
关注
6文章
835浏览量
54457 -
字符
+关注
关注
0文章
229浏览量
24888 -
代码
+关注
关注
30文章
4555浏览量
66771
原文标题:如何遍历中文字符串?
文章出处:【微信号:程序喵大人,微信公众号:程序喵大人】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
DB Tools insert data.vi寫入中文字符串至Mysql數據庫失敗
DB Tools insert data.vi在寫入中文字符串至mysql數據庫表中時寫入失誤,誰能幫忙解決一下,謝謝。補充說明:寫入英文字符串不會出錯,更換為ACCESS或SQL Server數據庫后也能正常寫入.
发表于 08-15 17:15
关于定义中文字符串的问题
本人使用的是pic18f25k20,想要定义一些中文字符串,结果定义的时候发现了一些问题,无法理解,请各位大神帮忙。直接上图吧,定义了两个中文字符串,第二个后面多了一些方框,不知道是什么意思,编译的话都通过了。是不是这种定义方式对中文字
发表于 11-06 11:34
如何在multiedit中对中文字符进行删除操作?
在multiedit中利用MULTIEDIT_AddKey(hMulti, GUI_KEY_BACKSPACE)可以很好的删除光标上一个8为ascii字符,但是对于16位的中文字符就不好使,大家用的是什么办法来删除中文字符的呀?
发表于 09-25 04:25
C语言关于中文字符串的使用误区在哪
C语言关于中文字符串的使用误区背景前几天在写c语言代码进行文件读写的时候,在处理文件中的中文诗句的过程中发现了c语言txt文本文件的中文读取到char数组中的一些不同寻常之处,因此做一个总结。c语言
发表于 07-14 07:54
Arduino发送中文字符为什么需要转码?
前言:技术售后中,技术论坛上,经常有学习、使用Arduino的小伙伴咨询“怎样能让Arduino IDE输出中文字符串”的问题。归根结底就是Arduino IDE使用的UTF8编码,不支持GB编码
发表于 12-17 11:23
如何在终端上使用UART输出中文字符
应用程序: 演示如何在终端上使用 UART 输出中文字符
BSP 版本:M451系列BSP CMSIS V3.01.003
硬件: NuTiny-EVB-M451 LQFP100 V1.3
序列
发表于 08-23 06:46
M451如何在终端上使用UART输出中文字符
应用程序: 演示如何在终端终端上使用 UART 输出中文字符
BSP 版本:M451系列BSP CMSIS V3.01.003
硬件: NuTiny-EVB-M451 LQFP100 V1.3
发表于 08-30 07:23
IAR中UTF-8中文字符串不显示怎么解决?
界面使用的是ucGUI原本使用GB2312编码的中字符串可以直接读取显示,字库也用FontCvt做了初始化的时候也添加了GUI_UC_SetEncodeutf8();函数
后面换成UTF-8的中文字符串
发表于 10-07 07:11
如何使用采用SPI Flash存储中文字符库的方法说明
在嵌入式系统中,有时候需要中文字符来表示我们的某些信息,但是中文字符库本身占据空间比较大,因此有时候仅仅对系统中需要的字符进行编码,其它的则省掉,但是这样对于编程调用字符时是比较麻烦的
字符串函数重写练习
字符串函数重写练习:字符串比较、字符串拼接、字符串查找、字符串拷贝、内存比较、内存拷贝、内存初始化、内存比较、二维数组定义及基本使用、位运算
C语言总结_字符串函数封装练习
字符串函数重写练习:字符串比较、字符串拼接、字符串查找、字符串拷贝、内存比较、内存拷贝、内存初始化、内存比较、二维数组定义及基本使用、位运算
评论