本文作者:林子木
问: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 那么就是两个字节的中文字符!