额外减小 发表于 2022-8-31 16:16:24

C语言求助:如何从文件中读取汉字

本帖最后由 额外减小 于 2022-8-31 16:17 编辑

我想要从一个.txt文件中读取一些汉字,但是好像库里面定义的所有函数都是用来读取char类型的数据。
所以,我想问一下如何从文件读取汉字而且正确的输出(思路即可)(或者有哪些我不知道的库函数可以实现这一功能吗)
(大佬勿喷{:10_277:} {:10_254:} )
#include <stdio.h>

int main()
{
        FILE *fp = fopen("file.txt","r");
        char str;
        fgets(str,4,fp);
        printf("%s",str);
        return 0;
}
这么做是失败的,有乱码。

wp231957 发表于 2022-8-31 16:54:39

根据文件的编码方式计算一个汉字的长度   比如UTF8一个汉字的长度是3
GBK一个汉字的长度是2

char str;这个东西要初始化

额外减小 发表于 2022-8-31 17:08:16

wp231957 发表于 2022-8-31 16:54
根据文件的编码方式计算一个汉字的长度   比如UTF8一个汉字的长度是3
GBK一个汉字的长度是2



感谢大佬,谢谢谢谢,但我还是不明白您说的意思是什么。
我有一些无知的问题请您指导谢谢
1.如何知道文件的编码方式
2.具体如何完成程序的要求
上述问题还请大佬不吝赐教{:10_254:}

额外减小 发表于 2022-8-31 17:10:21

额外减小 发表于 2022-8-31 17:08
感谢大佬,谢谢谢谢,但我还是不明白您说的意思是什么。
我有一些无知的问题请您指导谢谢
1.如何知道文 ...

哦,文件有写是UTF-8
但具体应该要怎么写代码完成将文件中的汉字打印出来呢{:10_254:}

wp231957 发表于 2022-8-31 17:13:39

额外减小 发表于 2022-8-31 17:10
哦,文件有写是UTF-8
但具体应该要怎么写代码完成将文件中的汉字打印出来呢

你那两个4都表明只能取一个汉字
要想多获取汉字,要提高这两个数字
前面已经说过,要对数组进行初始化,以防止乱码

额外减小 发表于 2022-8-31 17:16:30

本帖最后由 额外减小 于 2022-8-31 17:17 编辑

wp231957 发表于 2022-8-31 17:13
你那两个4都表明只能取一个汉字
要想多获取汉字,要提高这两个数字
前面已经说过,要对数组进行初始化 ...

#include <stdio.h>

int main()
{
        FILE *fp = fopen("file.txt","r");
        char str={'\0'};
        fgets(str,54,fp);
        printf("%s",str);
        return 0;
}
我的新代码,但还是乱码。
浣犲ソ浣犲ソ鎴戞槸閲戦獜瀹炬兂娴嬭瘯涓

额外减小 发表于 2022-8-31 17:18:28

本帖最后由 额外减小 于 2022-8-31 17:23 编辑

额外减小 发表于 2022-8-31 17:16
我的新代码,但还是乱码。
浣犲ソ浣犲ソ鎴戞槸閲戦獜瀹炬兂娴嬭瘯涓

欸,为什么我的乱码没法发出来
只有一部分

额外减小 发表于 2022-8-31 17:19:17

wp231957 发表于 2022-8-31 17:13
你那两个4都表明只能取一个汉字
要想多获取汉字,要提高这两个数字
前面已经说过,要对数组进行初始化 ...

所以说,我思路没有问题是吗

wp231957 发表于 2022-8-31 17:22:37

额外减小 发表于 2022-8-31 17:18
欸,为什么我的乱码没法发出来
只有一部分

你是在什么环境下执行的exe
我怀疑是你的cmd是gbk

额外减小 发表于 2022-8-31 17:24:53

wp231957 发表于 2022-8-31 17:22
你是在什么环境下执行的exe
我怀疑是你的cmd是gbk

可以把你的问题描述的具体一些吗?我好像未听懂(我很逊)

wp231957 发表于 2022-8-31 17:28:36

额外减小 发表于 2022-8-31 17:24
可以把你的问题描述的具体一些吗?我好像未听懂(我很逊)

printf("中国")
你试一试,这句代码看看能输出啥

额外减小 发表于 2022-8-31 17:30:13

wp231957 发表于 2022-8-31 17:28
printf("中国")
你试一试,这句代码看看能输出啥

是输出“中国”

Fan远 发表于 2022-8-31 17:33:33

wp231957 发表于 2022-8-31 16:54
根据文件的编码方式计算一个汉字的长度   比如UTF8一个汉字的长度是3
GBK一个汉字的长度是2



1

wp231957 发表于 2022-8-31 17:34:39

额外减小 发表于 2022-8-31 17:30
是输出“中国”

https://blog.csdn.net/jackailson/article/details/115417081

jhq999 发表于 2022-8-31 17:36:38

https://blog.csdn.net/weixin_29798625/article/details/117015353

额外减小 发表于 2022-8-31 17:36:44

wp231957 发表于 2022-8-31 17:34
https://blog.csdn.net/jackailson/article/details/115417081

我试试看
谢谢大佬{:10_254:}

wp231957 发表于 2022-8-31 17:40:37

额外减小 发表于 2022-8-31 17:36
我试试看
谢谢大佬

但是那样即使解决,也是有bug
最好的解决办法还是换一个编辑器
比如vscode默认就不存在gbk这个东西
编码高度一致,所以不存在乱码这个东西

额外减小 发表于 2022-8-31 17:46:33

wp231957 发表于 2022-8-31 17:40
但是那样即使解决,也是有bug
最好的解决办法还是换一个编辑器
比如vscode默认就不存在gbk这个东西


谢谢大佬
但是如果我这样,中国就变成乱码了。这里面是什么原因?
谢谢大佬

jackz007 发表于 2022-8-31 17:48:28

本帖最后由 jackz007 于 2022-8-31 17:53 编辑

         先用命令:
type file.txt
         看看输出的东西,如果不能看到汉字,说明文件内容是 UTF-8 编码的,需要按照下面的方法转换文件编码为 GBK。
         用 Windows 记事本打开 "file.txt" 选择 "另存为" 在对话框的 "文件名"、"保存类型" 栏的下方,还有一个"编码" 栏,点开下拉菜单,选择 "ANSI" 然后保存文件,这样,"file.txt" 的内容应该就可以用你编写的程序正常看到了。

额外减小 发表于 2022-8-31 17:51:37

本帖最后由 额外减小 于 2022-8-31 17:54 编辑

jackz007 发表于 2022-8-31 17:48
用 Windows 记事本打开 "file.txt" 选择 "另存为" 在对话框的 "文件名"、"保存类型" 栏的下方,还 ...

哇哦
不愧是大佬
这么多大佬一起回答我这个萌新
我都不知道该给谁最佳答案{:10_243:}
页: [1] 2
查看完整版本: C语言求助:如何从文件中读取汉字