如何识别出双字节字符,比如汉字

oracleperl 2020-03-21 11:28:02
想请教:
比如 "好|",针对GBK字符集, 我如何识别出汉字和|
好|总共三个字节
汉字的高位第一个bit肯定是1,这个没疑问。但是低位字节的最高位也可能是1,也可能是0
为什么这里第一个和第二个字节是双字节的汉字“好”,而第三个字节是单字节的呢?
为什么不是第一个字节是单字节字符,而第二(假设最高位是1)和第三个字节构成双字节字符呢?
谢谢
...全文
1674 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看其前一贴说从文本读出来的,未说明比较汉字要做虾米?
真相重于对错 2020-03-24
  • 打赏
  • 举报
回复
如果用自然语言描述。 读完一个字符,处理下一个字符的时候,如果高位为字节1,继续处理下一个字节,字符读取完毕。 如果高位为0,直接按单字节字符处理,字符处理完毕。 重复上述过程。。。。。 大致代码如下
char str[] = "哈哈1你好23";
	char* p = str;
	while (*p != '\0')
	{
		char hz[3] = { 0 };
		if (*p&0x80)
		{
			hz[0] = *p;
			printf("高位编码:%x|", (*p)&0x000000ff);
			p++;
			hz[1] = *p;
			printf("底位编码:%x ", (*p)&0x000000ff);
			printf("\t字符:%s\n", hz);
		}
		else
		{
			printf("编吗:%x \t 字符: %c\n", *p, *p);
		}
		p++;
	}
oracleperl 2020-03-24
  • 打赏
  • 举报
回复
引用 9 楼 智者知已应修善业 的回复:
看了一帖,不妨转一下
谢谢,看不懂
  • 打赏
  • 举报
回复
看了一帖,不妨转一下
真相重于对错 2020-03-24
  • 打赏
  • 举报
回复
把状态机画出来,就应该清楚了,而且我想今天汉字在计算机的应用那么普及的情况下,完全应该有现成的库,
oracleperl 2020-03-24
  • 打赏
  • 举报
回复
引用 3 楼 gouyanfen 的回复:
这个看你用什么编码,不确定编码没办法确定规则
GBK
  • 打赏
  • 举报
回复
数码段仿真又添加了输出汉字,有点与贴相关的意思.
真相重于对错 2020-03-24
  • 打赏
  • 举报
回复
高位编码:b9|底位编码:fe 字符:哈 高位编码:b9|底位编码:fe 字符:哈 编吗:31 字符: 1 高位编码:c4|底位编码:e3 字符:你 高位编码:ba|底位编码:c3 字符:好 编吗:32 字符: 2 编吗:33 字符: 3
  • 打赏
  • 举报
回复
因为这图是这样的一个字符串参数。

string a = "今天" + to_string(timeDest.wYear) + "年" + (timeDest.wMonth > 9 ? "" : "0") + to_string(timeDest.wMonth) + "月" + (timeDest.wDay > 9 ? "" : "0") + to_string(timeDest.wDay) + "号XianFaJuShi回复";

数码段仿真(a);
  • 打赏
  • 举报
回复
是的,先看看输出的效果图,因为不知应用场景,以及有何特殊要求。
gouyanfen 2020-03-23
  • 打赏
  • 举报
回复
这个看你用什么编码,不确定编码没办法确定规则
oracleperl 2020-03-23
  • 打赏
  • 举报
回复
引用 1 楼 智者知已应修善业 的回复:
说实在的,我没看明白 谢谢
  • 打赏
  • 举报
回复
之前好像都结帖了,又提问?假如没虾米特别的,普通的判断即可,像这样可以混合输出就可以了。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧