日期:2014-05-16  浏览次数:21899 次

Linux下UTF-8编码问题
本帖最后由 Programe_Lover 于 2014-04-12 13:38:40 编辑
有一个文件,里面每一行全部是连续的中文,我的程序是需要从那个文件里找到我要的中文字,我的代码实现是这样的(部分不完整):
    while(!((temp_char&0xE0)==0xE0)) in_stream.get(temp_char);//一直读取到第一个中文字符的第一个字节

    while(temp_char!='\n')
    {
      ch_char[0]=temp_char;
      in_stream.get(temp_char);
      ch_char[1]=temp_char;
      in_stream.get(temp_char);
      ch_char[2]=temp_char;
      in_stream.get(temp_char);
      int k=strcmp(ch_char,thechar); // the_char是需要找到的那个中文字
      if(k==0) return head_pinyin;
      else in_stream.get(temp_char);
    }
    in_stream.get(temp_char); //read the next line's head
      
因为中文字在UTF-8编码中是三个字节,而且第一个字节肯定是1110XXXX,所以我就用这行代码来判断是否为中文字符:
 while(!((temp_char&0xE0)==0xE0)) in_stream.get(temp_char);

但是,我发现当我把第一个中文字正确读出来后,剩下的中文字全部错误,当程序把第二个字的三个字节存储在ch_char中之后,我打印ch_char的值,显示的错误是不完全的顺序动作,应该就是字节顺序错了,但是我是一个字节一个字节读取的,字节顺序怎么会错误呢?求教大神啊!!!
------解决方案--------------------
看下这个:
http://www.cnblogs.com/hnrainll/archive/2011/05/07/2039700.html
宽字节。。