鱼C论坛

 找回密码
 立即注册
查看: 3870|回复: 24

[已解决]C语言求助:如何从文件中读取汉字

[复制链接]
发表于 2022-8-31 16:16:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

int main()
{
        FILE *fp = fopen("file.txt","r");
        char str[4];
        fgets(str,4,fp);
        printf("%s",str);
        return 0;
}
这么做是失败的,有乱码。
最佳答案
2022-8-31 17:48:28
本帖最后由 jackz007 于 2022-8-31 17:53 编辑

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

使用道具 举报

发表于 2022-8-31 16:54:39 | 显示全部楼层

回帖奖励 +1 鱼币

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

char str[4];  这个东西要初始化

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-31 17:08:16 | 显示全部楼层
wp231957 发表于 2022-8-31 16:54
根据文件的编码方式  计算一个汉字的长度   比如UTF8  一个汉字的长度是3
GBK  一个汉字的长度是2

感谢大佬,谢谢谢谢,但我还是不明白您说的意思是什么。
我有一些无知的问题请您指导谢谢
1.如何知道文件的编码方式
2.具体如何完成程序的要求
上述问题还请大佬不吝赐教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦,文件有写是UTF-8
但具体应该要怎么写代码完成将文件中的汉字打印出来呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:13:39 From FishC Mobile | 显示全部楼层
额外减小 发表于 2022-8-31 17:10
哦,文件有写是UTF-8
但具体应该要怎么写代码完成将文件中的汉字打印出来呢

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

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[54]={'\0'};
        fgets(str,54,fp);
        printf("%s",str);
        return 0;
}
我的新代码,但还是乱码。
[code]浣犲ソ浣犲ソ鎴戞槸閲戦獜瀹炬兂娴嬭瘯涓
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-31 17:18:28 | 显示全部楼层
本帖最后由 额外减小 于 2022-8-31 17:23 编辑
额外减小 发表于 2022-8-31 17:16
我的新代码,但还是乱码。
[code]浣犲ソ浣犲ソ鎴戞槸閲戦獜瀹炬兂娴嬭瘯涓


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

乱码

乱码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

所以说,我思路没有问题是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:22:37 From FishC Mobile | 显示全部楼层
额外减小 发表于 2022-8-31 17:18
欸,为什么我的乱码没法发出来
只有一部分

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

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-31 17:24:53 | 显示全部楼层
AE48F2B0-8DD3-4f11-86A4-B06CCF8D9C5D.png
wp231957 发表于 2022-8-31 17:22
你是在什么环境下执行的exe
我怀疑是你的cmd是gbk


可以把你的问题描述的具体一些吗?我好像未听懂(我很逊)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:28:36 From FishC Mobile | 显示全部楼层
额外减小 发表于 2022-8-31 17:24
可以把你的问题描述的具体一些吗?我好像未听懂(我很逊)

printf("中国")
你试一试,这句代码看看能输出啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-31 17:30:13 | 显示全部楼层
wp231957 发表于 2022-8-31 17:28
printf("中国")
你试一试,这句代码看看能输出啥


是输出“中国”
B6595AD6-F0A4-4446-9A30-8F89A10235FB.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:33:33 | 显示全部楼层

回帖奖励 +1 鱼币

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

1

评分

参与人数 1鱼币 +1 收起 理由
额外减小 + 1 ?你在说什么

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:34:39 From FishC Mobile | 显示全部楼层
额外减小 发表于 2022-8-31 17:30
是输出“中国”

https://blog.csdn.net/jackailson/article/details/115417081
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:36:38 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-31 17:36:44 | 显示全部楼层
wp231957 发表于 2022-8-31 17:34
https://blog.csdn.net/jackailson/article/details/115417081

我试试看
谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:40:37 From FishC Mobile | 显示全部楼层
额外减小 发表于 2022-8-31 17:36
我试试看
谢谢大佬

但是那样即使解决,也是有bug
最好的解决办法还是换一个编辑器
比如vscode默认就不存在gbk这个东西
编码高度一致,所以不存在乱码这个东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

谢谢大佬 FE7E64EA-681F-4ea6-9824-31B4D17D8150.png
但是如果我这样,中国就变成乱码了。这里面是什么原因?
谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-31 17:48:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-8-31 17:53 编辑

         先用命令:
type file.txt
         看看输出的东西,如果不能看到汉字,说明文件内容是 UTF-8 编码的,需要按照下面的方法转换文件编码为 GBK。
         用 Windows 记事本打开 "file.txt" 选择 "另存为" 在对话框的 "文件名"、"保存类型" 栏的下方,还有一个"编码" 栏,点开下拉菜单,选择 "ANSI" 然后保存文件,这样,"file.txt" 的内容应该就可以用你编写的程序正常看到了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-31 17:51:37 | 显示全部楼层
本帖最后由 额外减小 于 2022-8-31 17:54 编辑
jackz007 发表于 2022-8-31 17:48
用 Windows 记事本打开 "file.txt" 选择 "另存为" 在对话框的 "文件名"、"保存类型" 栏的下方,还 ...


哇哦
不愧是大佬
这么多大佬一起回答我这个萌新
我都不知道该给谁最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表