Write a function to validate whether the input is valid UTF-8. Input will be string or byte array, output should be true or false.
UTF-8是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
比如:
0xxxxxxx是一个合法的单字节UTF8编码。
110xxxxx 10xxxxxx是一个合法的2字节UTF8编码。
1110xxxx 10xxxxxx 10xxxxxx是一个合法的3字节UTF8编码。
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx是一个合法的4字节UTF8编码。
bool valid_utf8(const vector<unsigned char>& data) { int size = 0; for(auto c : data) { if(size == 0) { if((c >> 5) == 0b110) size = 1; else if((c >> 4) == 0b1110) size = 2; else if((c >> 3) == 0b11110) size = 3; else if(c >> 7) return false; } else { if((c >> 6) != 0b10) return false; --size; } } return size == 0; }
相关推荐
VUE 面试题汇合 vue-interview-questions-master VUE 面试题汇合 vue-interview-questions-master VUE 面试题汇合 vue-interview-questions-master VUE 面试题汇合 vue-interview-questions-master VUE 面试题...
interview-docs-masterinterview-docs-masterinterview-docs-master
123-Essential-JavaScript-Interview-Question, JavaScript访问问题 123 -JavaScript-Interview-Questions这本书将由 2018年06月 完成并可以供购买。 如果你想让我把这本书的早期拷贝,请在这里添加你的NAME 和电子...
Algorithm-coding-interview-university.zip,一个完整的计算机科学学习计划成为一名软件工程师。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
interview-notebook.pdf Java秋招复习资料
Technical-Interview-Preparation-Checklist.pdf
一些编程题目,没事可以看看还是有点帮助的
DOCKER-INTERVIEW-QUESTIONS.pdf
Cracking-the-Coding-Interview-Dragged.pdf
Java-Interview-Advanced-master.zip
Java-Interview-Question ,基础知识,源自网络
深度学习框架001 深度学习框架有哪些?002 介绍一下TensorFlow常用的Optimizer003 Caffe的depthwise为什么慢,怎么解决00
Java-Interview-Questions-总结各种面试题
115-Java-Interview-Questions-and-Answers, 115 Java访谈问题和答案- 终极列表 #115-Java-Interview-Questions-and-Answers我们将讨论关于Java面试中可以使用的各种问题,以便雇主在Java和面向对象编程方面测试你的...
frame-project-interview-master
HackerRank-Interview-Preparation-Kit-master.rar
android-interview-questions
很全的面试资料,包括c/c++/linux 等等。不用再费劲网上搜了
interview-api-源码.rar