关于中文文本的截取

从Java转到C++后,对于它的字符串处理能力抱怨了好久 这不,非Unicode下对字符串进行截取有时会出现乱码,因为把一个汉字是两个字节,如果拆开了就显示不正确了

IsDBCSLeadByte

The IsDBCSLeadByte function uses the ANSI code page to determine whether a specified byte is potentially a lead byte that is, the first byte of a two-byte character in a double-byte character set (DBCS).

To use a different code page, use the IsDBCSLeadByteEx function.

BOOL IsDBCSLeadByte(
BYTE    // character to test
);

MSDN里有这个函数,可以判断一个char是不是一个双字节字的开始. 但是,对于汉字来说,第一个字节肯定大于0x80,第二个字节就不一定了,所以,要判断一个字节是不是汉字的一部分,只能从字符串的开头进行扫描:

for (int i = 0; i < text.length(); i++)
{
    if (IsDBCSLeadByte(text[i])
    {
        i++;
        //TODO:
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术点滴

Windows字符集的统一与转换

Windows字符集的统一与转换 一、字符集的历史渊源 在Windows编程时经常会遇到编码转换的问题,一直以来让刚接触的人摸不着头脑。其实只要弄清Win32程...

217100
来自专栏腾讯移动品质中心TMQ的专栏

Python2中的中文字符编解码浅析

自动化测试过程中,输入文本、读取文件、解析网络请求、字符串断言、正则匹配这些步骤都是必不可少的。而Python是测试过程中最为常用的语言之一,很多测试团队的自动...

31760
来自专栏程序生活

Pandas GroupBy的使用

在许多情况下,我们将数据分成几组,并在每个子集上应用一些功能。在应用中,我们可以执行以下操作:

65740
来自专栏林德熙的博客

win10 uwp xaml 绑定接口

早上快乐 就在你的心问了我一个问题,他使用的属性是显式继承,但是无法在xaml绑定

7820
来自专栏恰童鞋骚年

.NET基础拾遗(1)类型语法基础和内存管理基础

在.NET中所有的内建类型都继承自System.Object类型。在C#中,不需要显示地定义类型继承自System.Object,编译器将自动地自动地为类型添...

12120
来自专栏编程之旅

javascript——为自己的库编写更健壮的API函数

最近在看书的时候,阅读了关于使用JavaScript在代码库的设计时需要注意的文章,对我的启发很大,于是决定记录一些其中的知识点,一是分享自己获取到的知识,二是...

10630
来自专栏Jimoer

在Java的反射中,Class.forName和ClassLoader的区别

最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来...

17620
来自专栏Python自动化测试

python接口测试之序列化与反序列化(四)

在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python...

17740
来自专栏码云1024

字符编码

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://polaris.blog.51cto.co...

34540
来自专栏Echo is learning

字符、字符集、编码,以及它们python中会遇到的一些问题(上)

20670

扫码关注云+社区

领取腾讯云代金券