c语言如何识别无BOM的UTF8文本
来源:互联网 发布:如何下载ppt软件 编辑:程序博客网 时间:2024/06/10 22:28
UTF-8编码的文本文档,有的带有BOM (Byte Order Mark, 字节序标志),即0xEF, 0xBB, 0xBF,有的没有。Windows下的文本编辑器在保存UTF-8格式的文本文档时会自动添加BOM到文件头。在判断这类文档时,可以根据文档的前3个字节来进行判断。
但是,如果文档不带有BOM,就无法根据BOM做出判断,那么那在编程判断时就要根据UTF-8字符编码的规律进行判断了。
uft8下字符的编码规律如下:
1字节:0xxxxxxx
2字节:110xxxxx 10xxxxxx
3字节:1110xxxx 10xxxxxx 10xxxxxx
4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
在实际情况下,几乎所有能用到的UTF-8字符最长就是3个字节。
下面程序仅对最大3字节长的UTF-8字符进行了判断,pBuffer为从文件中按二进制流读取的字节
bool IsUTF8(const void* pBuffer, long size) { bool IsUTF8 = true; unsigned char* start = (unsigned char*)pBuffer; unsigned char* end = (unsigned char*)pBuffer + size; while (start < end) { if (*start < 0x80) // (10000000): 值小于0x80的为ASCII字符 { start++; } else if (*start < (0xC0)) // (11000000): 值介于0x80与0xC0之间的为无效UTF-8字符 { IsUTF8 = false; break; } else if (*start < (0xE0)) // (11100000): 此范围内为2字节UTF-8字符 { if (start >= end - 1) break; if ((start[1] & (0xC0)) != 0x80) { IsUTF8 = false; break; } start += 2; } else if (*start < (0xF0)) // (11110000): 此范围内为3字节UTF-8字符 { if (start >= end - 2) break; if ((start[1] & (0xC0)) != 0x80 || (start[2] & (0xC0)) != 0x80) { IsUTF8 = false; break; } start += 3; } else { IsUTF8 = false; break; } } return IsUTF8; }c语言实现Unicode与UTF-8互转,参照博客点击打开链接
0 0
- c语言如何识别无BOM的UTF8文本
- 如何识别无BOM的UTF8文本
- 识别UTF8无BOM
- [编码] 无BOM的UTF8
- Qt实现的gbk/utf8无bom文本转码小工具
- UTF8无BOM
- php文件存储时的编码格式--utf8无BOM
- utf8的bom
- JAVA 无BOM utf8文件编码判断
- utf8与utf8+bom的区别
- CStdioFile的Writestring写入中文的总结(unicode-ucs2/utf8-无Bom/ansi-gb2312)
- CStdioFile的ReadString读入中英文的总结(unicode-ucs2/utf8-无bom/ansi) .
- windows7下gvim打开UTF8无bom文件中文乱码问题的解决
- C#判断文本文件编码是ANSI还是无BOM的UTF8
- ThinkPhP UTF8+BOM导致 如何解决
- 无BOM的条件下C语言判断一个文件是否为UTF-8编码代码(windows,linux通用)
- UTF8 BOM
- UTF8编码规则及用C++语言的识别
- 有哪些操作可以导致direct reads(direct path reads)
- 百练2950:摘花生(模拟)
- ZooKeeper简介与安装
- Spring 计划任务
- 2016总结与2017的展望
- c语言如何识别无BOM的UTF8文本
- C语言程序设计 翁恺 oj3
- POJ3624 - Charm Bracelet(01背包)
- IOS 地区选择器(swift版本) AreaPickerView_swift
- opencv学习之直方图均衡化
- 六:函数返回值是一个引用
- Javascript的基本数据类型
- Matlab编程与数据类型 -- 分支条件选择语句if/end
- react-native在Anroid真机运行时可能会遇到白屏的情况解决办法