UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:

  1. 对于 1 字节的字符,字节的第一位设为0,后面7位为这个符号的unicode码。
  2. 对于 n 字节的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

这是 UTF-8 编码的工作方式:

   Char. number range  |        UTF-8 octet sequence(hexadecimal)    |              (binary)--------------------+---------------------------------------------0000 0000-0000 007F | 0xxxxxxx0000 0080-0000 07FF | 110xxxxx 10xxxxxx0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

给定一个表示数据的整数数组,返回它是否为有效的 utf-8 编码。

注意:
输入是整数数组。只有每个整数的最低 8 个有效位用来存储数据。这意味着每个整数只表示 1 字节的数据。

示例 1:

data = [197, 130, 1], 表示 8 位的序列: 11000101 10000010 00000001.返回 true 。
这是有效的 utf-8 编码,为一个2字节字符,跟着一个1字节字符。

示例 2:

data = [235, 140, 4], 表示 8 位的序列: 11101011 10001100 00000100.返回 false 。
前 3 位都是 1 ,第 4 位为 0 表示它是一个3字节字符。
下一个字节是开头为 10 的延续字节,这是正确的。
但第二个延续字节不以 10 开头,所以是不符合规则的。

class Solution {
public:
    bool validUtf8(vector<int>& data) {
        int cnt = 0;
        for (int d : data) {
            if (cnt == 0) {
                if ((d >> 5) == 0b110) cnt = 1;
                else if ((d >> 4) == 0b1110) cnt = 2;
                else if ((d >> 3) == 0b11110) cnt = 3;
                else if (d >> 7) return false;
            } else {
                if ((d >> 6) != 0b10) return false;
                --cnt;
            }
        }
        return cnt == 0;
    }
};

393.UTF-8编码验证相关推荐

  1. html转换编码格式,html编码转换 html编码设置utf gbk编码转换图文教程

    html编码转换 html编码设置utf gbk编码转换图文教程篇 常用HTML编码之urf-8编码转换为gb2312编码或者gb2312转换为utf-8编码快速转换设置,这里DIVCSS5介绍使用D ...

  2. python utf—8编码问题待解决

    执行python manage. py runserver后出现错误 utf-8编码出错 (result, consumed) = self._buffer_encode(data, self.err ...

  3. LeetCode 393. UTF-8 编码验证(位运算)

    1. 题目 UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则: 对于 1 字节的字符,字节的第一位设为0,后面7位为这个符号的unicode码. 对于 n 字节的字符 (n &g ...

  4. 【数据结构与算法】之深入解析“UTF-8编码验证”的求解思路与算法示例

    一.题目要求 给定一个表示数据的整数数组 data,返回它是否为有效的 UTF-8 编码. UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则: 对于 1 字节的字符,字节的第一位 ...

  5. mysql选择utf 8编码_MySQL支持UTF-8编码全攻略

    来源:网海拾贝 最近看到良多若干关于MySql支持utf-8编码的成绩,恰好自身也要用,去找了一下,没有写的很片面的. 清算了一下,供各人参考. 在一下效能器设置测试议决 效能器设置: window2 ...

  6. html utf 8编码转换器,utf8和gb2312编码在线转换工具

    utf8和gb2312编码在线转换工具_网页代码站(www.webdm.cn) style="Z-INDEX: 1000; VISIBILITY: hidden; WIDTH: 1px; P ...

  7. C练题笔记之:Leetcode-393. UTF-8 编码验证

    题目: 给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码. UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则: 对于 1 字节 的字符,字节的第一位设 ...

  8. mac mysql utf 8编码_MacOS下MySQL设置UTF8编码问题

    1,检查默认安装的MySQL的字符集 mysql> show variables like '%char%'; +--------------------------+------------- ...

  9. leetcode算法题--UTF-8 编码验证

    原题链接:https://leetcode-cn.com/problems/utf-8-validation/ class Solution {public:static const int MASK ...

  10. 营业执照编码验证规则(15位和18位

    参考: https://blog.csdn.net/archer119/article/details/52904286

最新文章

  1. SAP HANA简介
  2. 直播 | 清华大学王晨阳:轻量级Top-K推荐框架及相关论文介绍
  3. (九)数据结构之“图”
  4. Android Notification总结
  5. [转]javascript小技巧,超强推荐
  6. linux文件名过长无法删除,不能删除文件,出现“源文件名长度大于系统支持的长度...
  7. CentOS7上GitLab的使用
  8. php 添加样式,PHP实现可自定义样式的分页类
  9. 《A Practical Guide to Continuous Delivery》作者访谈录
  10. CentOS安装及注意事项
  11. Dubbo的架构体系
  12. python核心编程-第三章-个人笔记
  13. centos源码安装Xen
  14. linux scp 自动脚本,scp自动运行脚本
  15. 简账(开源记账软件)-数据库设计
  16. EXCEL长数字显示和转化为文本
  17. web sql indexedDB
  18. Deepin开发环境搭建
  19. 通过MediaRecorder 录制视频的时候,魅族手机录制视频后,大小显示0
  20. 清华学霸讲计算机,清华学霸的霸气演讲!看完后才明白人与人的差距就是这样拉开的!...

热门文章

  1. 布局篇(1)—If you love css …
  2. 用.NET提供的Mail来发邮件
  3. [NOI2016]优秀的拆分
  4. Fragment中获取Activity的Context
  5. talk record
  6. [ASM] 基础概念
  7. 给wordpress添加留言者操作系统、浏览器和运营商信息
  8. java入门第二季 答答租车系统
  9. 深职院c语言考试试卷,深职院第1章C语言基础与入门教学.ppt
  10. 为什么训练时测试准确率大幅度波动_Nature Mach Intell|类药性预测准确率有极限...