今天和大家分享下如何遍歷中文字符串,主要是如何打印中文字符,因為中文字符串每個字符占用不只一個字節(jié)的空間,如果我們逐個字節(jié)遍歷,會出現(xiàn)奇怪的結果。而UTF-8編碼寫的中文字符是有特定結構的,我們可以按照它的規(guī)則去遍歷打印。
下面是詳情:
前提:UTF-8編碼。
先看下面的代碼和運行結果:
上面代碼定義了一個9個中文的字符串,但打印size確是27,挨個字符遍歷也都是?。
這個本質(zhì)是因為中文不只占用一個字節(jié)的空間,換一種方式遍歷:
因為一個中文字符不一定占用幾個字節(jié),但它們的長度其實可以從字符的頭中讀取出來,這點可以查看UTF-8的Wiki介紹:https://en.wikipedia.org/wiki/UTF-8#Description
這里可以看到,通過Byte1的前4位就可以區(qū)分出這個字符究竟占用幾個字節(jié),所以就有了上述的遍歷方式。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
原文標題:如何遍歷中文字符串?
文章出處:【微信號:程序喵大人,微信公眾號:程序喵大人】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
相關推薦
DB Tools insert data.vi在寫入中文字符串至mysql數(shù)據(jù)庫表中時寫入失誤,誰能幫忙解決一下,謝謝。補充說明:寫入英文字符串不會出錯,更換為ACCESS或SQL Server數(shù)據(jù)庫后也能正常寫入.
發(fā)表于 08-15 17:15
本人使用的是pic18f25k20,想要定義一些中文字符串,結果定義的時候發(fā)現(xiàn)了一些問題,無法理解,請各位大神幫忙。直接上圖吧,定義了兩個中文字符串,第二個后面多了一些方框,不知道是什么意思,編譯的話都通過了。是不是這種定義方式對中文字
發(fā)表于 11-06 11:34
在multiedit中利用MULTIEDIT_AddKey(hMulti, GUI_KEY_BACKSPACE)可以很好的刪除光標上一個8為ascii字符,但是對于16位的中文字符就不好使,大家用的是什么辦法來刪除中文字符的呀?
發(fā)表于 09-25 04:25
C語言關于中文字符串的使用誤區(qū)背景前幾天在寫c語言代碼進行文件讀寫的時候,在處理文件中的中文詩句的過程中發(fā)現(xiàn)了c語言txt文本文件的中文讀取到char數(shù)組中的一些不同尋常之處,因此做一個總結。c語言
發(fā)表于 07-14 07:54
c語言漢字的存儲方式和特點是什么?C語言中文字符串的使用誤區(qū)有哪些?
發(fā)表于 10-15 06:24
怎樣去解決STM32串口打印printf發(fā)送中文字符時亂碼的問題呢?
發(fā)表于 11-30 07:40
使用printf去打印中文字符的時候出現(xiàn)亂碼是為什么?
發(fā)表于 12-02 07:12
前言:技術售后中,技術論壇上,經(jīng)常有學習、使用Arduino的小伙伴咨詢“怎樣能讓Arduino IDE輸出中文字符串”的問題。歸根結底就是Arduino IDE使用的UTF8編碼,不支持GB編碼
發(fā)表于 12-17 11:23
應用程序: 演示如何在終端上使用 UART 輸出中文字符
BSP 版本:M451系列BSP CMSIS V3.01.003
硬件: NuTiny-EVB-M451 LQFP100 V1.3
序列
發(fā)表于 08-23 06:46
界面使用的是ucGUI原本使用GB2312編碼的中字符串可以直接讀取顯示,字庫也用FontCvt做了初始化的時候也添加了GUI_UC_SetEncodeutf8();函數(shù)
后面換成UTF-8的中文字符串
發(fā)表于 10-07 07:11
字符串的表示 隨著計算機在文字處理與信息管理中的廣泛應用, 字符串已成為最常用的數(shù)據(jù)類型之一, 許多計算機中都提供字符串操作功能, 一些計算機還給出讀寫字
發(fā)表于 10-13 17:11
?3064次閱讀
C語言教程之回文字符串,很好的C語言資料,快來學習吧。
發(fā)表于 04-25 15:49
?0次下載
PHP內(nèi)置的字符串長度函數(shù)strlen無法正確處理中文字符串,它得到的只是字符串所占的字節(jié)數(shù)。對于GB2312的中文編碼,strlen得到的值是漢字個數(shù)的2倍,而對于UTF-8編碼的
發(fā)表于 02-20 14:30
?9次下載
字符串函數(shù)重寫練習:字符串比較、字符串拼接、字符串查找、字符串拷貝、內(nèi)存比較、內(nèi)存拷貝、內(nèi)存初始化、內(nèi)存比較、二維數(shù)組定義及基本使用、位運算
發(fā)表于 05-05 15:02
?1990次閱讀
字符串函數(shù)重寫練習:字符串比較、字符串拼接、字符串查找、字符串拷貝、內(nèi)存比較、內(nèi)存拷貝、內(nèi)存初始化、內(nèi)存比較、二維數(shù)組定義及基本使用、位運算
發(fā)表于 08-14 09:42
?993次閱讀
評論