【问题标题】:Detect and print Unicode characters with Qt使用 Qt 检测和打印 Unicode 字符
【发布时间】:2023-03-11 15:46:01
【问题描述】:

我正在尝试读取和打印一个可能包含也可能不包含 UTF-8 代码的文件。

我的示例文件包含:


\u22a2

我的天真密码:

    QFile file("/path/qteststream.txt");

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text ))
        std::cout << "Fail" << std::endl;

    QTextStream stream(&file);
    QTextStream qout(stdout);
    stream.setAutoDetectUnicode(true);

    while(!stream.atEnd())
      qout << stream.readLine() << endl;

但显然,我做错了什么。我希望 \u22a2 被打印为 unicode 字符,但程序只打印字符串。如何打印字符等序列?

【问题讨论】:

  • 输入文件是否包含确切的字符串“\u22a2”?或者您是否使用另一个程序来编写实际字符'\u22a2'?如果是第一个,我怀疑 QT 流类会自动转换它。
  • 是的,\u22a2 包含为字符串。那我应该手动转换吗?

标签: c++ qt unicode utf-8


【解决方案1】:

\u22a2 可能会被 C++ 编译器解释为 Unicode 字符,但在源代码之外情况有所不同。在文本文件中,\u22a2 仅连续 6 个字符(\u22a2)。尝试将 直接粘贴到文本文件中。

如果您有意在文本文件中包含 \u22a2 并希望将其转换为 Unicode 字符,您可能需要检查 this post

【讨论】:

  • 好吧,实际上我试图让用户不用在谷歌上搜索表格并复制和粘贴字符。那么,我应该只查找以\u 开头的字符串并使用QString::fromUtf8() 转换它们吗?
  • @EvgeniB.:检查答案中的链接。
【解决方案2】:

\u 转义码仅用于 C/C++ 文件,而不用于输入文件。 “Unicode 自动检测”意味着文件可以是 UTF-8(ASCII 作为子集也可以),或者带有 BOM 的 UCS-2,这对您的应用程序是透明的。

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多