当前位置:三九宝宝网 → 宝宝百科 → 宝宝知识 → 正文

判断字符串是否UTF8编码

更新:11-30 整理:39baobao.com
字体:

[VB中对字符串的处理及其扩展]众所周知,VB提供了许多对字符串进行常用操作的函数,像Left、Right、Trim、Mid、Len和InStr等等,能够满足大部分的应用;但对于一些特殊的用法,比如C++中的strrev函数,即将字符串顺序...+阅读

UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。

编码原理

先看这个模板:

UCS-4 range (hex.) UTF-8 octet sequence (binary)

0000 0000-0000 007F 0xxxxxxx

0000 0080-0000 07FF 110xxxxx 10xxxxxx

0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx

编码步骤:

1) 首先确定需要多少个8bits(octets)

2) 按照上述模板填充每个octets的高位bits

3) 把字符的bits填充至x中,字符顺序:低位→高位,UTF8顺序:最后一个octet的最末位x→第一个octet位x

根据UTF8编码,最多可由6个字节组成,所以UTF8是1-6字节编码组成

C++代码如下:

int IsTextUTF8(char* str,ULONGLONG length)

{

int i;

DWORD nBytes=0; UFT8可用1-6个字节编码,ASCII用一个字节

UCHAR chr;

BOOL bAllAscii=TRUE; 如果全部都是ASCII, 说明不是UTF-8

for(i=0;i=0x80)

{

if(chr>=0xFC

else if(chr>=0xF8)

nBytes=5;

else if(chr>=0xF0)

nBytes=4;

else if(chr>=0xE0)

nBytes=3;

else if(chr>=0xC0)

nBytes=2;

else

{

return FALSE;

}

nBytes--;

}

}

else 多字节符的非首字节,应为 10xxxxxx

{

if( (chr

}

nBytes--;

}

}

if( nBytes >0 ) 违返规则

{

return FALSE;

}

if( bAllAscii ) 如果全部都是ASCII, 说明不是UTF-8

{

return FALSE;

}

return TRUE;

}

本文地址:https://www.39baobao.com/show/39_41390.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

求N个字符串的最长公共子串求N个字符串的最长公共子串,N<=20,字符串长度不超过255。例如:N=3,由键盘依次输入三个字符串为What is local bus ?Name some local buses.local bus is a high speed I/O bus close...

WPS里轻松做出带圈字符WPS里轻松做出带圈字符用WPS Office 2003办小报时遇到制作带圈字符,Examda找到依靠WPS Office 2003自身来解决问题的办法。一、利用“标注文字”实现“带圈字符”功能1、...

玩转金山文字中的带圈字符金山文字2005是金山公司推出新一代办公套装组合WPS Office 2005中的优秀组件之一,它集首字下沉、带圈文字、拼音指南、合并字符、艺术字、域、VBA等许多优秀功能于一身,给我们...

字符功能调用类CharacterOrientedFunction01H、07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的输出05H —打印输出06H —控制台输入/输出09H —显示字符串0AH — 键...

金山文字2003中为字符添加上划线大家知道,我们在用字处理软件(如Word、金山文字)编辑文档时,要想给字符添加下划线,只要选中字符,单击“格式”工具栏上的“下划线”按钮(或者直接按“Ctrl+U”组合键)即可。如果...

字符串类数据列类型字符串可以用来表示任何一种值,所以它是最基本的类型之一。我们可以用字符串类型来存储图象或声音之类的二进制数据,也可存储用gzip压缩的数据。下表介绍了各种字符串类型:Tab...

汇编程序在屏幕显示字符的源代码这个一个刚学习汇编的入门实例,想学汇编的朋友可以看看 assume cs:code data segment db ’Wele to masm!’,0 data ends stack segment db 100 dup(0) stack ends ;以上定义...

C++基础:在LUA中使用UNICODE字符串今天测试用LUA调用windows的MessageBoxW函数。需要在LUA中定义UNICODE字符串。LUA的string类型为8位编码,包括数值0,可以编码任意二进制数据。如果编码UNICODE,则需要使用"\"转...

字符表示在实际应用中, 有一些特殊的字符不能直接输入在字符串中, 例如不能在字符串中直接输入引号(会破坏字符串的完整性). 这时我们就需要用到转义字符了(Escaping). 要使用转义字...