- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我花了一整天的时间试图解决这个问题,但没有成功。我到处寻找但没有工作代码。
操作系统:Win XP Sp2IDE 和框架:C++、Qt Creator 2.0。
我试图将一些 unicode (UTF-8) 文本输出到 Windows 控制台,但我看到的只是乱码而不是 unicode 字符。我知道 win 控制台确实支持 unicode(自 win 2000 起)...至少根据维基百科和网上的许多信息,但我不知道如何使其与 Qt 一起工作。我见过的大多数“解决方案”(还没有见过很多)都使用 C++ 和 WInAPI 技术……我无法使用它们,因为这不是 Qt 方式。我正在使用 QStrings 和 Qt!
代码如下。我拿出了所有不同的东西,试图让帖子的代码保持简单。希望有人能让代码正常工作。
#include <QtCore/QCoreApplication>
#include <QString>
#include <QTextStream>
#include <QDate>
#include <QFile>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QTextStream qin(stdin);
QTextStream qout(stdout);
//The last 2 chars in QString each need a double slash for an accent.
QString szqLine = QString::fromUtf8("abc áéüóöú őű");
//I want this text console output to be in red text color.
qout << "Bellow are some unicode characters: " << endl;
//The Win XP console does not display the unicode chars correctly!!
//The cosole does not display unicode chars even though it is capable
//according to wikipedia. I just don't know how with Qt.
//I want this text output in white(or default font color, not red.)
qout << szqLine << endl;
//Would be nice to get some unicode input from console too.
qout << "Write some unicode chars like above: " << endl;
QString szqInput;
szqInput = QString::fromUtf8(qin.readLine());
qout << "You wrote: " << endl;
qout << szqInput << endl;
return app.exec();
}
最佳答案
好的,我用这段代码做了一些测试。不需要对控制台进行特殊设置。
#include <QTextStream>
#ifdef Q_OS_WIN32
#include <windows.h>
#include <iostream>
#else
#include <locale.h>
#endif
class ConsoleTextStream: public QTextStream {
public:
ConsoleTextStream();
ConsoleTextStream& operator<<(const QString &string);
};
ConsoleTextStream::ConsoleTextStream():
QTextStream(stdout, QIODevice::WriteOnly)
{
}
ConsoleTextStream& ConsoleTextStream::operator<<(const QString &string)
{
#ifdef Q_OS_WIN32
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
string.utf16(), string.size(), NULL, NULL);
#else
QTextStream::operator<<(string);
#endif
return *this;
}
class ConsoleInput: public QTextStream {
public:
ConsoleInput();
QString readLine();
};
ConsoleInput::ConsoleInput():
QTextStream(stdin, QIODevice::ReadOnly)
{
}
QString ConsoleInput::readLine()
{
#ifdef Q_OS_WIN32
const int bufsize = 512;
wchar_t buf[bufsize];
DWORD read;
QString res;
do {
ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE),
buf, bufsize, &read, NULL);
res += QString::fromWCharArray(buf, read);
} while (read > 0 && res[res.length() - 1] != '\n');
// could just do res.truncate(res.length() - 2), but better be safe
while (res.length() > 0
&& (res[res.length() - 1] == '\r' || res[res.length() - 1] == '\n'))
res.truncate(res.length() - 1);
return res;
#else
return QTextStream::readLine();
#endif
}
int main()
{
#ifndef Q_OS_WIN32
setlocale(LC_ALL, "");
#endif
ConsoleTextStream qout;
qout << QString::fromUtf8("Текст на иврите: לחם גרוזיני מסורתי הנאפה בתנור לבנים\n");
qout << QString::fromUtf8("Текст на японском: ※当サイト内コンテンツ・画像・写真データの、転載・転用・加工・無断複製は禁止いたします。\n");
qout << QString::fromUtf8("Текст на европейском: áéüóöú őű\n");
qout << flush; // needed on Linux
ConsoleInput qin;
QString s = qin.readLine();
qout << s << endl;
s = qin.readLine(); // one more time, to ensure we read everything ok
qout << s << endl;
return 0;
}
在 Windows 上,它会打印除俄语和欧洲语之外的所有文本的方框。 Lucida Console 似乎不支持希伯来语和日语。有趣的是,当我将文本从控制台复制到剪贴板,然后粘贴到支持 Unicode 的地方(例如在浏览器中)时,它确实显示正确。这证明Windows实际上输出了Unicode,只是不显示它。需要一些完全支持 Unicode 的控制台字体。
请注意,在上面的示例中,我仅覆盖了一个 operator<<()
,但如果我想使用它们,我需要覆盖它们,因为它们返回 QTextStream&
但不是虚拟的,所以有必要让它们全部返回 ConsoleTextStream&
,否则类似 qout << 1 << someUnicodeString
将无法正常工作。
我还在 Linux 上使用 UTF-8 语言环境测试了这个示例,运行完美。
使用 ReadConsoleW() 进行控制台输入是有效的,因为控制台默认配置为所谓的行输入模式,因此它会等到用户按下 Enter 键,但不会等到有足够的字符可填充缓冲区,因此它会这样做正是我们想要的:如果缓冲区大小足够,则读取一行。
关于qt - Windows 控制台和 Qt Unicode 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4766301/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!