Qt的纯C++控制台程序解决中文乱码的三种方式


一、第一个方法

第一个方法适用于还没有开始创建程序时。
将Qt Creator文本编辑器的文件编码改成System,创建新项目后默认的文件编码就是GBK格式的了,控制台输出也就不会乱码
在这里插入图片描述



二、第二个方法

第二个方式适用于,已经创建了一个UTF-8的项目,然后将项目的编码改成与控制台的编码一致。

2.1 第一步

将第一个的操作步骤操作一下,将Qt Creator文本编辑器的文件编码改成System。


2.2 第二步

在这里插入图片描述
这一步设置完成后,项目中的cpp或h文件中,中文都会变成乱码。


2.3 第三步

将 Display file encoding 复选框勾上
路径:工具 --> 选项 --> 文本编辑器 -->显示 --> Display file encoding
在这里插入图片描述
勾上之后,会在编辑项目文件的右上角,会多出一个东西。
在这里插入图片描述

双击 UTF-8 弹出一个对话框,先以UTF-8载入,再以GBK保存,乱码就会变回中文了。
在这里插入图片描述




三、第三个方法(不建议使用)

第三个方法出现了一个很大的问题:下方代码示例

	string str;		
	cin >> str;		//str		//你好			//a你b
	cout << str;	//str		//空白空白		//a b

当cin中输入了中文字符,中文字符会替换成空白字符输出,不知道是怎么一回事。

对了,使用 system(“chcp 65001”); 代码改变控制台成为utf-8也是不行的。

第三个方法适用于未创建程序之前,并就是想用UTF-8编码。
第三个方法是将控制台的 “当前代码页” 的默认值改为UTF-8。即将控制台直接改成UTF-8编码。

通过修改注册表对控制台的编码进行修改。
Win + R 打开 “运行” ,输入 regedit 打开注册表

注册表位置:HEEY_CURRENT_USER\Console\F:_QTsrc_Tools_QtCreator_bin_qtcreator_process_stub.exe

每个人Qt安装的位置不一样,注册表路径也不太一样。修改 CodePage 的十进制的值为 65001 保存即可。
还有一件事:Qt版本比较高的可能没有这个注册表路径,我搜索也没找到。

然后创建项目happy去了,而且是永久式的。




四、参考/搬运

第一、二种方法参考:百度经验
第三种方法搬运:IT610 的 Dev-L 的 文章

  • 29
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
要写一个翻译软件控制台程序,你需要以下步骤: 1. 首先,你需要选择一个翻译API,比如百度翻译API或者谷歌翻译API等。你需要在该API的官网上注册一个账号,并且获取到API的App ID和密钥。 2. 接下来,你需要使用Qt的网络模块,通过爬虫的方式从API获取翻译结果。你可以使用QNetworkAccessManager类来发送HTTP请求,并使用QJsonDocument类来解析返回的JSON数据。 3. 在控制台程序中,你需要使用Qt的输入输出模块,让用户输入要翻译的文本,并将翻译结果输出到控制台。你可以使用QTextStream类来处理输入输出。 4. 最后,你需要将获取到的翻译结果显示在控制台中,并且让用户选择是否继续翻译其他文本。 以下是一个示例代码,其中使用了百度翻译API: ```cpp #include <QtCore/QCoreApplication> #include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkReply> #include <QtCore/QUrlQuery> #include <QtCore/QJsonDocument> #include <QtCore/QJsonObject> #include <QtCore/QJsonArray> #include <QtCore/QTextStream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 设置API的App ID和密钥 QString appId = "your_app_id"; QString appKey = "your_app_key"; // 创建网络访问管理器 QNetworkAccessManager manager; while (true) { // 获取用户输入的文本 QTextStream input(stdin); QString text = input.readLine(); // 如果用户输入exit,则退出程序 if (text == "exit") { break; } // 构造请求URL和参数 QUrl url("http://api.fanyi.baidu.com/api/trans/vip/translate"); QUrlQuery query; query.addQueryItem("q", text); query.addQueryItem("from", "auto"); query.addQueryItem("to", "en"); query.addQueryItem("appid", appId); // 将文本和密钥通过MD5加密后拼接到参数中 QString salt = QString::number(QDateTime::currentDateTimeUtc().toTime_t()); QString sign = QString("%1%2%3%4").arg(appId).arg(text).arg(salt).arg(appKey); query.addQueryItem("salt", salt); query.addQueryItem("sign", QCryptographicHash::hash(sign.toUtf8(), QCryptographicHash::Md5).toHex()); url.setQuery(query); // 发送HTTP请求 QNetworkReply *reply = manager.get(QNetworkRequest(url)); QEventLoop loop; QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); // 解析返回的JSON数据 QByteArray data = reply->readAll(); QJsonDocument doc = QJsonDocument::fromJson(data); QJsonObject obj = doc.object(); QJsonArray arr = obj.value("trans_result").toArray(); QString result = arr.at(0).toObject().value("dst").toString(); // 输出翻译结果 QTextStream output(stdout); output << result << endl; } return a.exec(); } ``` 请注意,该代码仅供参考,实际使用时需要根据你使用的API和具体需求进行修改。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值