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