[导读]1.读取UTF-8编码文本原理首先了解UTF-8的编码方式,UTF-8采用可变长编码的方式,一个字符可占1字节-6字节,其中每个字符所占的字节数由字符开始的1的个数确定,具体的编码方式如下:U-00000000–U-0000007F:0xxxxxxxU-00000080–U-00...
1.读取 UTF-8 编码文本原理首先了解 UTF-8 的编码方式,UTF-8 采用可变长编码的方式,一个字符可占 1 字节 -6 字节,其中每个字符所占的字节数由字符开始的 1 的个数确定,具体的编码方式如下:U-00000000 – U-0000007F: 0xxxxxxx
U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
因此,对于每个字节如果起始位为“0”则说明,该字符占有 1 字节。如果起始位为“10”则说明该字节不是字符的其实字节。如果起始为为 n 个“1” 1个“0”,则说明改字符占有 n 个字节。其中1≤n≤6。因此对于 UTF-8 的编码,我们只需要每次计算每个字符开始字节的 1 的个数,就可以确定这个字符的长度。GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(34, 34, 34);border-bottom: 1px solid rgb(238, 238, 238);line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.读取 GBK 系列文本原理
对于 ASCII、GB2312、GBK 到 GB18030 编码方法是向下兼容的 ,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为 0。因此我们只需处理好 GB18130,就可以处理与他兼容的所有编码,对于GB18130 使用双字节变长编码。单字节部分从 0×0~0x7F 与 ASCII 编码兼容。双字节部分,首字节从 0×81~0xFE,尾字节从 0×40~0x7E以及 0×80~0xFE,与 GBK 标准基本兼容。因此只需检测首字节是否小于 0×81 即可确定其为单字节编码还是双字节编码。GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(34, 34, 34);border-bottom: 1px solid rgb(238, 238, 238);line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;">3.C 代码实现
对于一个语言处理系统,读取不同编码的文本应该是最基础的需求,文本的编码方式应该对系统其他调用者透明,只需每次获取一个字符即可,而不需要关注这个文本的编码方式。从而我们定义了抽象类 Text,及其接口ReadOneChar,并使两个文本类 GbkText 和 UtfText 继承这个抽象类,当系统需要读取更多种编码的文件时,只需要定义新的类然后继承该抽象类即可,并不需要更改调用该类的代码。从而获得更好的扩展性。更好的方式是使用简单工厂模式,使不同的文本编码格式对于调用类完全透明,简单工厂模式详解请参看:设计模式:可复用面向对象软件基础。其中 Text 抽象类的定义如下:#ifndef TEXT_H
#define TEXT_H
#include
#include
using namespace std;
class Text
{
protected:
char * m_binaryStr;
size_t m_length;
size_t m_index;
public:
Text(string path);
void SetIndex(size_t index);
virtual bool ReadOneChar(string
声明:本文仅代表作者本人观点,不代表本站观点,如有问题请联系站方处理。
上海2022年5月25日 /美通社/ -- 近日,国际独立第三方检测、检验和认证机构德国莱茵TUV大中华区(以下简称“TUV莱茵”)携手英国建筑研究院(BRE),为上海建科集...
关键字:
照明系统
PERFORMANCE
能源管理
GB
4项关键性临床试验数据继续为百悦泽®(泽布替尼)治疗B细胞恶性肿瘤提供证据支持 BCL-2抑制剂BGB-11417作为单药治疗和与泽布替尼联合用药的早期数据显示管线的有力前景 中国北京、美国麻省剑桥和瑞士巴塞...
关键字:
管线
神州
BSP
GB
北京2022年4月6日 /美通社/ -- 日前,亚马逊云科技持续增强Serverless计算服务功能,将Amazon Lambda函数可用的临时存储空间提升20倍,从512MB增加至10,240 MB。该功能将帮助客户更...
关键字:
亚马逊
GB
(全球TMT2022年4月6日讯)日前,亚马逊云科技持续增强Serverless计算服务功能,将Amazon Lambda函数可用的临时存储空间提升20倍,从512MB增加至10,240 MB。该功能将帮助客户更轻松地...
关键字:
亚马逊
GB
北京2022年3月25日 /美通社/ -- 近日,政府数字化转型如火如荼推进,各类信息化软硬件工具不断发布。浪潮政务自动化辅助机器人(GBOT)助力一地方政府数字化转型。数字赋能,减时限、减跑腿、减材料,窗口外,办事人办...
关键字:
GB
自动化
机器人
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备。2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf....
关键字:
STM32
电平
FSMC
GB
100多年来,人类从简单的电报通信发展到如今的5G通信,生活发生了翻天覆地的变化,直播、VR/AR、超清视频会议、远程医疗、自动驾驶和智能家居等应用越来越广泛。而所有这些,都需要基于高速的数据传输。因为高速信号在铜缆中迅...
关键字:
光通信
光模块
GB
封装
1.读取UTF-8编码文本原理首先了解UTF-8的编码方式,UTF-8采用可变长编码的方式,一个字符可占1字节-6字节,其中每个字符所占的字节数由字符开始的1的个数确定,具体的编码方式如下:U-00000000–U-00...
关键字:
GB
本篇内容,纯属虚构!如有雷同,纯属巧合!1、为什么10月24日会是程序员节? A:不知道 B:1024MB=1GB约等于一级棒,程序员No.1 C:纯凑热闹点击下方空白区域查看答案▼「答案:B」 对于程序员来说,...
关键字:
GB
本篇内容,纯属虚构!如有雷同,纯属巧合!1、为什么10月24日会是程序员节? A:不知道 B:1024MB=1GB约等于一级棒,程序员No.1 C:纯凑热闹点击下方空白区域查看答案▼「答案:B」 对于程序员来说,...
关键字:
GB
电波暗室,用于模拟开阔场,同时用于辐射无线电骚扰(EMI)和辐射敏感度(EMS)测量的密闭屏蔽室。来源:http://gememc.com/upload/201712/20171201093022763.jpg0.前言最...
关键字:
EMC测试
GB
电波暗室,用于模拟开阔场,同时用于辐射无线电骚扰(EMI)和辐射敏感度(EMS)测量的密闭屏蔽室。来源:http://gememc.com/upload/201712/20171201093022763.jpg0.前言最...
关键字:
EMC测试
GB
近年来国产芯片厂商在SSD主控芯片上不断取得突破,此前英韧科技发布了多款PCIe4.0主控芯片,包括RainierIG5236及IG5636(企业级)等,现在他们又推出了新一代无DRAM缓存的PCIe4.0主控Raini...
关键字:
PCIe
SSD
GB
电波暗室,用于模拟开阔场,同时用于辐射无线电骚扰(EMI)和辐射敏感度(EMS)测量的密闭屏蔽室。来源:http://gememc.com/upload/201712/20171201093022763.jpg0.前言最...
关键字:
EMC测试
GB
前几天微软更新了Win11系统的硬件兼容要求,放宽了部分CPU的限制,部分七代酷睿高端型号现在可以支持Win11安装了。AMD这边的锐龙一代CPU最终没能通过微软的要求,微软称跟AMD合作验证之后也无法完美兼容,现在已经...
关键字:
4G
GB
锐龙
(全球TMT2021年8月24日讯)作为国之重器“500米口径球面射电望远镜”(简称:FAST) -- “中国天眼”,向全球发出邀约,各国科学工作者均可以通过在线方式提交观测申请。 “
关键字:
AI
GB
点击蓝字 关注我们请私信我们添加白名单国际能源署(IEA)估计,电机功耗占世界总电力的45%以上。因此,找到最大化其运行能效的方法至关重要。能效更高的驱动装置可以更小,并且更靠近电机,从而减少长电缆带来的挑战。从整体成本...
关键字:
GB
作为一名程序员,天生崇拜写代码能力强的程序大佬。但是,只要写代码能力足够强,就能在职业发展道路畅行无阻吗? 答案当然是:NO!你还需要有项目管理的能力。· 产品经理天天不干正事,提的需求没头没脑,烦;· 每周开不完的例会...
关键字:
GB
大家好,我是小林。之前图解了两篇Redis持久化技术,分别是:图解AOF日志图解RDB快照有些读者在评论区里提了一些问题,然后这些问题是他们自己延伸想出来的,我觉得问题具有代表性,就在这篇回答下这些问题。AOF日志篇的问...
关键字:
GB
昨天在阮一峰老师的博客平台看到一篇文章:一位国外程序员的酒后真言事情是这样的。美国最大的论坛Reddit,最近有一个热帖。一个程序员说自己喝醉了,软件工程师已经当了10年,心里有好多话想说,「我可能会后悔今天说了这些话。...
关键字:
GB