0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何遍历中文字符串

程序喵大人 来源:程序喵大人 2023-07-03 09:15 次阅读

今天和大家分享下如何遍历中文字符串,主要是如何打印中文字符,因为中文字符串每个字符占用不只一个字节的空间,如果我们逐个字节遍历,会出现奇怪的结果。而UTF-8编码写的中文字符是有特定结构的,我们可以按照它的规则去遍历打印。

下面是详情:

前提:UTF-8编码。

先看下面的代码和运行结果:

751dab2a-1939-11ee-962d-dac502259ad0.png

上面代码定义了一个9个中文的字符串,但打印size确是27,挨个字符遍历也都是�。

这个本质是因为中文不只占用一个字节的空间,换一种方式遍历:


753be536-1939-11ee-962d-dac502259ad0.png

因为一个中文字符不一定占用几个字节,但它们的长度其实可以从字符的头中读取出来,这点可以查看UTF-8的Wiki介绍:https://en.wikipedia.org/wiki/UTF-8#Description

756ede64-1939-11ee-962d-dac502259ad0.png

这里可以看到,通过Byte1的前4位就可以区分出这个字符究竟占用几个字节,所以就有了上述的遍历方式。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    940

    浏览量

    54812
  • 字符
    +关注

    关注

    0

    文章

    233

    浏览量

    25198
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68518

原文标题:如何遍历中文字符串?

文章出处:【微信号:程序喵大人,微信公众号:程序喵大人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    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

    C语言中文字符串的使用误区有哪些?

    c语言汉字的存储方式和特点是什么?C语言中文字符串的使用误区有哪些?
    发表于 10-15 06:24

    怎样去解决STM32口打印printf发送中文字符时乱码的问题呢

    怎样去解决STM32口打印printf发送中文字符时乱码的问题呢?
    发表于 11-30 07:40

    使用printf去打印中文字符的时候出现乱码是为什么?

    使用printf去打印中文字符的时候出现乱码是为什么?
    发表于 12-02 07:12

    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

    IAR中UTF-8中文字符串不显示怎么解决?

    界面使用的是ucGUI原本使用GB2312编码的中字符串可以直接读取显示,字库也用FontCvt做了初始化的时候也添加了GUI_UC_SetEncodeutf8();函数 后面换成UTF-8的中文字符串
    发表于 10-07 07:11

    字符串的表示

    字符串的表示  随着计算机在文字处理与信息管理中的广泛应用, 字符串已成为最常用的数据类型之一, 许多计算机中都提供字符串操作功能, 一些计算机还给出读写字
    发表于 10-13 17:11 3064次阅读
    <b class='flag-5'>字符串</b>的表示

    C语言教程之回文字符串

    C语言教程之回文字符串,很好的C语言资料,快来学习吧。
    发表于 04-25 15:49 0次下载

    PHP多字节字符串处理函数mbstring函数库的详细资料说明

    PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的
    发表于 02-20 14:30 9次下载
    PHP多字节<b class='flag-5'>字符串</b>处理函数mbstring函数库的详细资料说明

    字符串函数重写练习

    字符串函数重写练习:字符串比较、字符串拼接、字符串查找、字符串拷贝、内存比较、内存拷贝、内存初始化、内存比较、二维数组定义及基本使用、位运算
    的头像 发表于 05-05 15:02 1989次阅读

    C语言总结_字符串函数封装练习

    字符串函数重写练习:字符串比较、字符串拼接、字符串查找、字符串拷贝、内存比较、内存拷贝、内存初始化、内存比较、二维数组定义及基本使用、位运算
    的头像 发表于 08-14 09:42 992次阅读