`
lovnet
  • 浏览: 6710613 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

识别中英文

 
阅读更多

本文作者:林子木

问:C语言的char的数组中有中文和英文 怎么取出来

文本是从文本文件读取出来的,放进去,怎么取出来不出现乱码?中文是两个字节,英文是一个字节,如果取到英文再去取中文,中文就会乱码。怎么解决这个问题?

问题补充:

一次全部打印没问题,但是我现在的问题是需要把它截断显示,功能是电子书的分页,所以分页的时候如果把中文当成英文取的话后面就全乱了,请问各位到底应该怎么解决,全部门没一个人会

林子木的回答:

// test_read_chinese.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
char ch;
if((fp=fopen("c:\\stu.txt","rt+"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
while(1);
return 0;
}

告诉你我调试的结果:
英文字符:其实无所谓什么读取字符之类的,其实就是8bit的数据罢了,英文字符或者符号,其实仔细看的话,ASCII码表加续表最多到了7F,注意了是7F哦。这样你在文本里面打任何字符或者符号,挺正常的不多说。
中文字符:一旦遇到了中文字符,是16bit,分两次读取,你会发现这个时候8bit的最高位为1了,这里就是关键,就是说为了防止中英文编码的错乱,为了防止误读,中英文编码不在同一个码段。

综上所诉,就是说只要碰到读取的值大于7F 那么就是两个字节的中文字符!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics