今天和大家分享下如何遍歷中文字符串,主要是如何打印中文字符,因?yàn)橹形淖址總€字符占用不只一個字節(jié)的空間,如果我們逐個字節(jié)遍歷,會出現(xiàn)奇怪的結(jié)果。而UTF-8編碼寫的中文字符是有特定結(jié)構(gòu)的,我們可以按照它的規(guī)則去遍歷打印。
下面是詳情:
前提:UTF-8編碼。
先看下面的代碼和運(yùn)行結(jié)果:

上面代碼定義了一個9個中文的字符串,但打印size確是27,挨個字符遍歷也都是?。
這個本質(zhì)是因?yàn)橹形牟恢徽加靡粋€字節(jié)的空間,換一種方式遍歷:

因?yàn)橐粋€中文字符不一定占用幾個字節(jié),但它們的長度其實(shí)可以從字符的頭中讀取出來,這點(diǎn)可以查看UTF-8的Wiki介紹:https://en.wikipedia.org/wiki/UTF-8#Description

這里可以看到,通過Byte1的前4位就可以區(qū)分出這個字符究竟占用幾個字節(jié),所以就有了上述的遍歷方式。
-
編碼
+關(guān)注
關(guān)注
6文章
1040瀏覽量
57113 -
字符
+關(guān)注
關(guān)注
0文章
237瀏覽量
26268 -
代碼
+關(guān)注
關(guān)注
30文章
4975瀏覽量
74344
原文標(biāo)題:如何遍歷中文字符串?
文章出處:【微信號:程序喵大人,微信公眾號:程序喵大人】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
DB Tools insert data.vi寫入中文字符串至Mysql數(shù)據(jù)庫失敗
關(guān)于定義中文字符串的問題
如何在multiedit中對中文字符進(jìn)行刪除操作?
C語言關(guān)于中文字符串的使用誤區(qū)在哪
Arduino發(fā)送中文字符為什么需要轉(zhuǎn)碼?
如何在終端上使用UART輸出中文字符
IAR中UTF-8中文字符串不顯示怎么解決?
字符串的表示
PHP多字節(jié)字符串處理函數(shù)mbstring函數(shù)庫的詳細(xì)資料說明
如何遍歷中文字符串
評論