C编程输出中文为什么显示乱码

从词典文件中读取数据,输出的时候为什么显示乱码?
代码如下:
#include
2 #include
3
4 int main()
5 {
6 FILE *fp = fopen("text.txt","r");
7 char english[32],chinese[64],attribute[8];
8 int i=0,j=0,k=0;
9 int flag_null = 0, flag_p = 0;
10 while(!feof(fp))
11 {
12 char ch = fgetc(fp);
13 if(ch == ' ')
14 {
15 flag_null = 1;
16 }
17
18 if(ch == '.')
19 {
20 flag_p = 1;
21 }

22 if(flag_null!=1)
23 {
24 english[i] = ch;
25 i++;
26 }

27 else if(isalpha(ch)||ch=='.')

                               {

29 attribute[k] = ch;
30 k++;
31 }
32 else if(ch < 0)
33 {
34 chinese[j] = ch;
35 j++;
36 }
37
38 if(ch == '\n')
39 {
40 printf("%s %s %s\n",english,chinese,attribute);
41 }
42
43 }
44
45 fclose(fp);
46 }

text.txt文件内容
across   prep.横越 adv.横穿

输出:
across .??越横穿? prep.adv.??越横穿?

2个回答

汉字编码格式跟英文字符编码格式是不一样的。标准C语言库函数不能直接处理汉字。
%c,%s只能处理ASCII在[32,127]区间的字符输出。汉字编码超过这个范围了

你看看你软件设置的编码是gbk还是utf-8之类的,复制字典的内容编码可能跟软件不匹配,试一下先复制到doc或者txt文件为纯文本试试再复制到编程软件中,或者检查编码是否匹配

qq_18952005
陌上心-0 我是在mac终端下写的代码,终端设置成utf-8格式,有个奇怪的现象,把text.txt中的prep删除一个字符,输出就正常了。一直找不到原因。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
中文为什么显示乱码
有一英文版的源代码程序,把他的界面改成中文的,编译出来后显示的却是乱码,该怎么办?帮帮忙!
c/c++ 中文输出乱码?
用的是c-free, 前面编的文件没有出现这个问题,突然这个cpp输出就变成乱码了,而且头文件里的函数里输出也正常?咋回事呀,讲一下原理和解决方法吧[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/13.gif][/img]rn[img=https://img-bbs.csdn.net/upload/201609/26/1474867377_464291.png][/img]
jsp 为什么输出中文会乱码?
jsp 支持中文吗??
C语言char类型变量为什么赋值中文输出乱码?
char类型变量a声明后直接赋值,可以正常输出。rn![图片说明](https://img-ask.csdn.net/upload/201903/08/1552009333_832502.png)rnrn然而这样赋值却会输出乱码。rn![图片说明](https://img-ask.csdn.net/upload/201903/08/1552009485_330651.png)rnrn这是为什么?想了很久都没想通,是不是我代码写错了?rn小白求教!
python3 输出中文到csv显示乱码
问题描述 想要存储对新闻页面的解析结果,安装数据库一直没有成功,所以打算先存入csv文件试试,就出现了编码的问题,初始代码是 #存储解析到的内容 with open('news_detail.csv','w',newline='',encoding=&quot;utf-8&quot;) as file: fieldnames = ['title','auth...
输出 中文 到文件显示 乱码 的问题
FileOutputStream fout = new FileOutputStream(saveTo);rnfor(int i = 0;i <= allMessages.length()-1;i++)rn rn fout.write(allMessages.charAt(i));rn rnfout.close();rnrn英文正常,中文打开文件就是乱码rnrn加上这个也不行,请教!!!rnallMessages = ChangeVarcharItem(allMessages);//编码转换rnpublic static String ChangeVarcharItem (String strItem)rnrn tryrn rn strItem = new String(strItem.getBytes("ISO8859_1"),"gb2312");rn rn catch(Exception objExp)rn rn return strItem;rn rn
windows控制台程序输出中文到控制台显示乱码
打开命令行窗口,进入属性页面,选择使用旧版本控制台,之后就可以正常打印中文到控制台了。
python中文输出乱码
我在学习python,但是遇到了点小问题,先看看结果是这样的[img=https://img-bbs.csdn.net/upload/201608/02/1470130616_406458.png][/img]rn第一次是全部显示文件,没有错;第二次是一个一个显示,出现乱码。rn代码是这样的rn[code=python]#_*_coding:utf-8_*_rn'''rnCreated on Aug 1, 2016rnrn@author: zhourn'''rnfiles = open('hello.txt')rncoun = files.readline()rnprint counrnfor co in coun:rn print co,[/code]rn这是什么问题?decode()函数和encode()函数都用过,但是不能解决问题。
MYSQL中文输出乱码
select * from a into outfile "D:/user.xls" character set gbk;
solaris中文输出乱码
我在solaris 5.8(版本:Kernel version: SunOS 5.8 Generic 117350-05 Jun 2004rn)上做java开发,JDK版本为(air01(admin)% java -versionrnjava version "1.3.1_10"rnJava(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_10-b03)rnJava HotSpot(TM) Client VM (build 1.3.1_10-b03, mixed mode))rn发现我的java程序直接输出中文显示为乱码。rnrnjava代码如下:rnpublic class TestZH rn public static void main(String args[]) rnrn String strResult = "今天星期三";rn System.out.println(strResult );rn System.out.println("中华人民共和国");rn rnrnrn但是如果是从c程序中输出中文就不会有问题:rnc代码如下:rn#include rn#include rn#include rnrnint main(int argc, char* argv[])rnrn printf("%s\n", "中华人民共和国!");rnrnrn不知道是因为jdk版本或是jdk配置问题还是系统配置问题,麻烦各个高手帮我看看,谢谢!rnrn
中文输出产生乱码。
老问题,但是发帖回复的人。。说的都不是很清楚,rn所以求一份详细一点的代码。。rnrn都说把rnrn rn加到config文件里面就可以了 。。可是真的只是复制进去到rn rn内就可以了么? rnrn完全是坑爹。。。。。rnrn[code=C#]rnrnrn rnrnrn rnrn[/code]rnrn编译报错 无法识别的配置节 globalizationrnrnrn这是怎么一回事啊 。。。。 rnrn跪求正解。。
print 中文输出乱码
#!/usr/bin/python # -*- coding: utf-8 -*- print "hello world  我是中文" 存储为hello.py文件 在cmd运行, 中文为乱码 资料查找:   源码文件的编码格式为utf-8,但是window的本地默认编码是gbk,所以在控制台直接打印utf-8的字符串当然是乱码了! 解决方法1:
为什么输出会是乱码?
[code=C/C++]rn#include rn#include rnrnint main()rnrn rn printf("\189\n");rn printf("Z\x81rich\n");rn printf("\x81ber\n");rn system("PAUSE"); rn return 0;rnrn[/code]rn为什么输出会是乱码?\1是一个不可打印字符,为什么会出现笑脸的字符?,\x81 二进制为10000001超过了ASCII码的范围,rn\x81be同样也是,乱码是怎么出现的呢,用的什么字符集?
为什么输出乱码
最近在学习C语言,想知道下面代码为什么会输出乱码。rnrn[code=c]rn#include "stdafx.h"rnrnchar* getLine() rn int c;rn char a[20];rn int index=0;rn while ((c = getchar())!='\n') rn a[index++] = c;rn rnrn a[index] = '\0';rnrn return a;rnrnint main()rnrn printf("%s", getLine());rn while (true) rn return 0;rnrn[/code]
为什么RandomAccessFile输出乱码?
我要对比两个txt文档的内容,如果有不相同的词,就把第一个文档中的这个词拷贝到新的txt文档中,使用RandomAccessFile方便对文件的定位,可却导致输出乱码,请问怎么办?部分代码如下:rn RandomAccessFile in1 = rn new RandomAccessFile("result.txt", "r");rn RandomAccessFile in2= rn new RandomAccessFile("result1.txt", "r");rn rn PrintWriter out= rn new PrintWriter(new FileWriter("out.txt", true));rn rn String line1, line2;rn char[] buffer1= new char[50];rn char[] buffer2= new char[50]; rn int flag = 0;rn rn while((line1 = in1.readLine()) != null)rn while((line2 = in2.readLine()) != null)rn// in2.mark(0);rn for(int i = 0; i < line1.length() rn && i < line2.length(); i++)rn buffer1[i]= line1.charAt(i);rn buffer2[i]= line2.charAt(i);rn rn if (buffer1[i] == ',')rn if (buffer2[i] == ',')rn for (int j = i; j < 50; j++)rn buffer1[j] = buffer2[j] = '\n';rn// String.valueOf(buffer1);rn// String.valueOf(buffer2);rn String s1= new String(buffer1);rn String s2= new String(buffer2);rn boolean tag;rn tag= s1.equals(s2);rn if (tag)rn flag = 1;rn rn rn break;rn rn elsern if( buffer2[i] == ',')rn break;rn rn if (flag == 1)rn break;rn rn rn rn if (flag == 1)rn flag = 0;rn in2.seek(0);rn rn else if (flag == 0)rn out.write(line1);rn out.write('\n');rn in2.seek(0);rn rn rn in1.close();rn in2.close();rn out.close();
为什么输出是乱码?
Win1.document.open();rn Win1.document.writeln(' ' + titleList[1] + '');rn Win1.document.writeln('');rn Win1.document.writeln(''+LayerNameShow+'');rn Win1.document.writeln('');rn Win1.document.close();
为什么会输出乱码??
string s("hello")rnprintf("%s", s);rnrn为什么会是乱码?那怎样打印string类型
为什么会输出乱码?
今天无意中在VC6中输入rn#includernusing namespace std;rnvoid main()rnrn char str[5];rn cout<
为什么输出的是乱码?
以下代码为从数据库中提取image字段的信息:rn if ( dBContent.Read())rn rn Response.AppendHeader("content-disposition","filename=" + (String)dBContent["accname"]);【这里的filename为文件名,如果为中文则从浏览器输出filename为乱码,不知能否解决?】rn Response.ContentType = (String) dBContent["acc_type"];rn Response.ContentEncoding = System.Text.Encoding.GetEncoding ("gb2312");rn Response.OutputStream.Write((byte[]) dBContent["acc_content"],0,(int) dBContent["acc_length"]);rn rn Response.End();rn
php的输出显示乱码
php的输出显示乱码 1、index.php: 你好,。 你 岁了。 2、index.html 测试 姓名: 年龄: 3、显示效果如下: 4、解决方法: a、直接写个配置的php文件,如config.php,内容如下 <?php header("Content-type:text/html;charset=utf-
strftime 输出显示乱码
ubuntu系统设置所有编码为 gbk 直接调用strftime strftime(time_buf, 80, "%a, %e %b %G %T %z", p_stime);  输出为  Îå, 18 12Ô 2015 11ʱ19·Ö36Ãë +0800 原因 strftime字符串输出到buf时是按照系统设置的编码格式输出的,ubuntu设置成gbk,输出的字符串就是
C 输出乱码
[code=C/C++]#include rn#include rn#include rn#include rnrnchar * FormatString(char *fmt,...)rnrn char *data = (char *)malloc(strlen(fmt) + 1);rn char *p;rn char c;rn int i = 0;rn int j = 0;rn va_list list;rn va_start(list,fmt);rn memset(data, '\0', strlen(data));rn while((c=*fmt))rn rn if(*fmt == '%')rn rn ++fmt;rn switch(*fmt)rn rn case 's':rn p = va_arg(list, char *);rn data=(char *)realloc(data, strlen(data) +strlen(p) + 1);rn for(j=0;j<(int)strlen(p);j++)rn rn data[i]=p[j];rn i++;rn rn break;rn rn rn elsern rn data[i]=*fmt;rn i++;rn rn fmt++;rn rn data[i]='\0';rn va_end(list);rn return data;rnrnint main()rnrn printf("%s\n", FormatString("\"%s\":\"%s\"","1","nihao"));rn return 0;rn[/code]rn字符串中间如果出现特殊字符就出现乱码了。。。rn那里出问题了。。。
为什么VB中显示乱码(中文)?
有什么解决办法吗?
###为什么Dropdownlist中显示不了中文??(乱码)###
goboliztion 中已经设置 response="gb2312" request="gb2312"rn其它都正常,如DATAGRID可以正确显示rn请大家帮忙,谢谢
Jcreator3.0中文为什么显示的全是乱码?
通过使用3.0,发现引起汉字显示不正常的地方主要有:rn注释(包括/**/ //)rn字符串("")rnrn折中解决方案:rn打开:rn\Xinox Software\JCreatorV3\Syntax\java.synrn将相关部分修改为以下内容(供参考):rnrn rn rn rn rn rn rn rn rn rn rn 'rn 'rn rn -+*/<>!~%^&|=rn []()rn \rnrnrn如果大家仔细发现,就知道其实我是将注释(/**/ //)和字符串的开始和结尾字符去掉了。rnrnrn但这样一做原来的那些注释的字体颜色和没有注释的字体颜色是一样的,看起来挺不顺眼!!!!有没有更好的解决办法!!!!!rn
JCreate输入中文为什么显示乱码?
JCreate输入中文为什么显示乱码?请指教?
通过传中文为什么显示乱码?
哪伟大侠能够指点迷津???
中文为什么是乱码?
我是在日文系统下使用ORACLE9.0,rn语言是VB.net,OO4O连接ORACLE。为什么我在文本框里录入的中文汉字存到ORACLE中却是乱码呢?这个程序要求既可以录入日文,又可以录入中文。请高手赐教。
中文为什么是乱码!!!!!!
为什么在linux下访问Windows分区中的中文文件,全都是乱码?应该如何处理!!!!!!
中文为何显示乱码
我用C#开发windows mobile,在form的language属性中设置为中文,我在一个textbox中显示中文,中文显示为乱码,为何啊?
控制台输入中文输出乱码问题解决
开始学编代码时,总是会键盘录入一些数据,然后控制台输出,然而如果键盘录入数据是中文,输出时很可能就是乱码。原因:键盘的输入流格式默认为 GBK,而我们的项目默认编码格式为UTF-8,键盘录入中文时以GBK编码,控制台输出时又以UTF_8解码,这样自然就会产生乱码了。解决办法:鼠标右键 run as --&amp;gt;run configurations --&amp;gt;右侧common --&amp;gt; enc...
python 初学 中文输出乱码
输出乱码问题的解决方案: 1> 文本代码模块前输入 # -*- coding: utf-8 -*- 2>打开文本另存为,选择UTF-8编码;
php输出xml,输出中文时有乱码?
linux平台下,用php的dom api创建xml,输出中文时有乱码?用utf-8编码,ie不能正确rn显示,用gb2312编码,总是报错rnrn如rnrnrnrn rn ¹视?/classid>rn 2003-06-04 03:00:00rn 英格兰rn 0rn ?rn ?rn 塞尔维亚黑山rn 0rn ?-?rn rnrn rn rn
curses输出中文是乱码?
不用curses的c程序,输出中文字符串正常,但是用curses的mvaddstr输出中文就变成乱码了?rn怎么解决呢?rn谢谢!
pycharm输出中文为乱码
File->setting->File Encodings->3个地方都改成utf8
hadoop解决中文输出乱码
-
解决中文Powershell 输出乱码
输入 $OutputEncoding = New-Object -typename System.Text.UTF8Encoding 然而只改这个解决不了问题。。 输入的文档转为utf8 这才是核心 cat .\train_data.txt -encoding UTF8|where {$_ -notmatch "(null)|(404\s)"} |Out-File result.txt...
codeblocks控制台输出中文输出乱码
printf("你好,世界"); 在写C语言的时候打印汉字,输出的时候会出现乱码。 同时codeblocks右下角会出现一个提示: the saved document contained characters which were illegal in the selected encoding. the file is encoding has been change...
WIN10+MinGW中文输出乱码的解决方法
事情是这样的,我用MinGW发现它队中文支持不好,出现一些诡异的bug,上图 可以看到,中文开头就会乱码。试过写文件,没有乱码,是终端显示问题。 上网查阅了大量资料,问了好多大佬,最终给出的建议无非就是改编码或者换编译器。我试过gbk和utf-8,源文件和输出文件的编码都设置过,发现改为gbk无论如何都会出现这个bug,utf-8就不会乱码,但是大多数人的windows都是默认gbk编码,所以,...
linux下mysql中文输出乱码
原数据库字符集格式: mysql> show variables like 'character%'; +--------------------------+-----------------------------------------------------+ | Variable_name            | Value
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview