关于中文文本的截取

从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 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

一切的谜都解开了!在写这篇随笔之前,我的心情只能用金田一每次破案后的这句台词来表达。

1151
来自专栏程序生活

Pandas GroupBy的使用

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

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

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

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

2526
来自专栏林德熙的博客

win10 uwp xaml 绑定接口

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

672
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-20(01)总结,递归,IO流

1:递归(理解) (1)方法定义中调用方法本身的现象 举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项; A:要有出口,否则就是死递归 B...

3499
来自专栏JavaEdge

设计实现一个LRU Cache1 什么是LRU Cache2 实现思路

3697
来自专栏恰同学骚年

.NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码...

752
来自专栏恰同学骚年

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

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

1112
来自专栏Echo is learning

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

1907
来自专栏前端黑板报

Javascript即将迎来Optional Chaining

Optional Chaining 现在处于 Stage 1。 它是什么? Optional Chaining 使我们能检查一个对象上面是否存在某属性。其它一些...

3615

扫码关注云+社区