utf 8格式字串輸入限制

2021-08-21 17:13:38 字數 1302 閱讀 7345

在對輸入字元進行正則校驗的時候,一般是進行輸入字元的型別匹配和長度匹配。型別匹配是通用的,但是長度匹配則有區別,主要是看傳輸的資料是以什麼格式進行傳輸的。

在utf-8中,英文是乙個位元組,普通中文是三個位元組,也有四個位元組的。不同的文字有不同的儲存位數,一共是1-6個位元組。

在utf-16中,英文和中文包括其他語言的字元都是2個位元組儲存的。

但是一般在實際顯示時,我們需要認定英文(半形)字元為乙個位元組,其餘所有字元為2個位元組。

本章只解析utf-8格式的字串,並達到某正則匹配限制。

進行兩步迴圈校驗,先進行字元型別校驗,在保證字元型別全部符合的情況下再進行字元個數校驗。

1.型別校驗,將不符合的資料型別從最後乙個開始刪。直至符合資料型別或者為空字元

while((!regex_match(para.c_str(),regex("[\\x00-\\x7f]*"))) & (!para.empty())) //任意數量的半形字元

2.進行字串長度校驗

2.1先將字串解析成vectoroutput的格式,計算得到字元數的總數量

參考**

using namespace std;

int num_1 = 0; //英文本元的數量

int num_2 = 0; //其餘字元的數量(包括中文,日文,各種外文)

int num_all = 0; //以英文本元乙個位元組,其餘字元2個位元組計算的數量

string input = "12字元3"

vectoroutput;

string ch;

for (size_t i = 0, len = 0; i != input.length(); i += len)

else if (byte >= 0xf8)

else if (byte >= 0xf0)

else if (byte >= 0xe0)

else if (byte >= 0xc0)

else

ch = input.substr(i, len);

output.insert(ch);

num_all = num_1 + num_2 * 2;

}

2.2 判斷得到的num_all是否符合

while(num_all > 16)

}

3.最後將ouput再解析成字串

for(int i=0;i

UTF8格式簡介

utf是unicode傳輸格式,有utf8,utf16,utf32等。這裡介紹utf8。utf8分成單位元組 雙位元組 三位元組 四位元組模式。具體如下 0 x 7bit 相容ascii碼 110 xx 10 11bit 1110 x 10 10 16bit 漢字所在 11110 10 10 10 ...

vs除錯正確顯示utf8格式字串

預設的,vc偵錯程式只能正常顯示ansi字串及unicode字串,而utf 8字串及其他格式則無法顯示。這裡無需編寫外掛程式及修改配置檔案,只需要將要顯示的字串拉到watch中,並在變數後面新增,s8即可顯示。這個功能隸屬於visual studio偵錯程式中的格式說明符。可以在這個頁面檢視完整的格...

流式校驗UTF8格式

由於某個工程需要校驗資料是否是utf8格式的,然後翻了翻rfc,確實挺簡單的編碼格式,所以直接寫了,但是越寫越感覺不對,位元組不夠時真的需要cache嗎?想肯定還有非常簡單的方法,果不其然,找到了這篇 流式校驗 utf8 原始碼 static unsigned char types static u...