注册 登录
编程论坛 C++教室

帮帮忙,怎么不能输出到txt文件

a111234567 发布于 7 天前 01:38, 1193 次点击
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
8 回复
#2
a1112345677 天前 01:42
第二张图可以正常把$符号写进txt文件,第一张图不能把¥写进txt文件。
#3
a1112345677 天前 01:50
qDebug()<<ch;能正常输出¥
#4
yiyanxiyin7 天前 11:22
编码问题, ¥是中文模式下的全角, 需要utf8支持, $这个是ascii码, 不需要utf8支持, qDebug()能正常输出, 那是因为你转成了utf8,你知道不转化就不能正常显示, 那么你为什么不直接把转化后的ch保存在文件中呢:
fwrite(ch,1,strlen(ch),fp);

#5
a1112345677 天前 12:29
回复 4楼 yiyanxiyin
写入txt文件的还是乱码
#6
rjsp7 天前 12:42
第一幅图中调用的是 toUtf8,第二幅图中调用的是 toLatin1。
应该都调用 toLocal8Bit。
#7
a1112345677 天前 13:17
回复 6楼 rjsp
不行
#8
a1112345677 天前 15:38
回复 6楼 rjsp
刚才弄错了,现在可以写入到文件。只不过qDebug()<<ch;不能正常显示。
#9
rjsp7 天前 15:44
回复 7楼 a111234567
又是这种毫无意义的回复。
你用的是 fopen( ……, "a" ) 追加写入,那么是 之前的编码不是utf8(因为编码不一致导致后面乱码,但与此问题无关),还是之后的utf8编码的文字写入错乱?

即便是第一幅图的代码,仅提供的代码也是没问题的(可能有问题的代码你没贴出来)。比如下面的测试代码,正确应该给local编码(中文Windows的话,默认是gbk),但我给的却是utf8(跟你第一幅图一样),在windows11上是没问题的(低版本的windows自带的记事本可能猜错编码而乱码,但即使如此,也不是文件有问题,而是系统自带的记事本太弱智)

程序代码:
#include <print>

int main( void )
{
    FILE* fp = fopen( "fuck.txt", "wb" );
    std::print( fp, "{}", (const char*)u8"¥\uFFE5" ); // 两个字符都是 ¥
    fclose( fp );
}

1