在 Qt 中创建 UTF-8 文件

2023-12-19

我正在尝试在 Qt 中创建一个 UTF-8 编码的文件。

#include <QtCore>

int main()
{
    QString unicodeString = "Some Unicode string";
    QFile fileOut("D:\\Temp\\qt_unicode.txt");
    if (!fileOut.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        return -1;
    }

    QTextStream streamFileOut(&fileOut);
    streamFileOut.setCodec("UTF-8");
    streamFileOut << unicodeString;
    streamFileOut.flush();

    fileOut.close();

    return 0;
}

我认为当 QString 默认为 Unicode 并且当我将输出流的编解码器设置为 UTF-8 时,我的文件将是 UTF-8。但事实并非如此,它是 ANSI。 我做错了什么?我的琴弦有问题吗?你能更正我的代码以创建 UTF-8 文件吗? 我的下一步是读取 ANSI 文件并将其保存为 UTF-8 文件,因此我必须对每个读取的字符串执行转换,但现在我想从一个文件开始。 谢谢。


2022 编辑:以下内容适用于 Qt 4。Qt 5 及更高版本默认使用 UTF-8,因此此答案不适用于最新的 Qt 版本。

你的代码是绝对正确的。我认为唯一可疑的部分是:

QString unicodeString = "Some Unicode string";

它看起来可疑的原因是 QString 在从 C 样式字符串文字构造时默认使用 Latin1 编码,因此如果您只想使用带重音的拉丁字符,您可能没问题,但使用除此之外的任何内容(西里尔语、中文) 、日语、希伯来语...)并且它不再正常工作。处理此问题的最佳方法是将源代码编码为 UTF-8,然后执行以下操作:

QString unicodeString = QString::fromUtf8("Some Unicode string");

这适用于任何可以想象的语言。使用 QObject::trUtf8() 甚至更好,因为它为您提供了很多 i18n 功能。

Edit

虽然您确实生成了正确的 UTF-8 文件,但如果您希望记事本将您的文件识别为 UTF-8,那就是另一回事了。您需要在其中放入 BOM。可以按照另一个答案中的建议来完成,或者这是另一种方式:

streamFileOut.setGenerateByteOrderMark(true);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Qt 中创建 UTF-8 文件 的相关文章

  • 如何区分哪些 unicode 字符是字母(单词)还是标点符号?

    我想检测文本中的单词 即我需要知道给定文本中的哪些字符是字母 即它们可以是 口语 单词的一部分 另一方面 哪些字符是标点符号等 例如 在上面的句子中 我 想要 和 i 和 e 是这方面的单词 而空格 和逗号则不是 这样做的困难在于我希望能够
  • 如何从 php 中的字符串中删除 unicode 字符 (LEFT_TO_RIGHT_MARK)

    我试图在将字符串编码为 JSON 之前从字符串中删除从左到右标记 u200e 和从右到左标记 u200f 以下两者似乎都不起作用 s mb ereg replace u200e s s preg replace u200e u s s pr
  • 闪亮的本地部署错误:输入字符串 1 无效 UTF-8

    我很惊讶地发现一个突然的错误 我的 ShinyApp 停止工作并出现未知错误 提示 输入字符串 1 无效 UTF 8 即使在昨天 该应用程序也可以正常运行 但是突然停止了 下面是我运行时的错误描述runApp gt runApp Liste
  • 哪些字符可以用作正则表达式分隔符?

    哪些字符可以用作 Perl 正则表达式的分隔符 m re m re and m re 一切似乎都有效 但我想知道所有可能性 From perlop http perldoc perl org perlop html 通过 m 您可以使用任意
  • PHP 中的 JS charCodeAt 等效项(具有完整的 unicode 和 emoji 兼容性)

    我在 JS 中有一个简单的代码 如果涉及特殊字符 我无法在 PHP 中复制它 这是 JS 代码 参见JSFiddle https jsfiddle net h8oca3qg 5 用于输出 var str t char t and speci
  • JSP:无法弄清楚如何为 GlassFish 3.1.2 响应设置 UTF-8

    我正在使用 GlassFish 3 1 2 每当访问 JSP 页面时都会看到以下警告 PWC4011 无法将请求字符编码设置为UTF 8 context myapp 因为请求参数已经被读取 或者 ServletRequest getRead
  • ColdFusion cfmail 主题行中的特殊字符

    邮件主题行中的特殊字符将转换为问号或方框 我尝试将主题行的动态字符串包装在 URLEncodedFormat 中 但最终徒劳无功
  • 如何在 Emacs shell 缓冲区中获得对“✖”等的支持?

    我正在运行一个进程 如果出现错误 则输出字符 如 Unicode 中定义 但是 如果在 Emacs shell 缓冲区 GNU Emacs 的 Aquamacs 发行版 中运行该进程 我根本看不到错误 使用 braeburn aquamac
  • GoLang - 坚持使用 ISO-8859-1 字符集

    我正在开发一个项目 我们需要将信息保存在具有 ISO 8859 1 表的旧数据库中 因此 在向数据库写入内容之前 我需要将其从 UTF 8 转换为 ISO 8859 1 每次从数据库检索它时 我都需要将其转换回 UTF 8 我试图使用图书馆
  • 如何删除 utf-8 中无法识别的字符? mysql/php

    我有一个设置为 utf 8 的 mysql 数据库 我已将 php 标头设置为 header Content Type text html charset utf 8 在我的html中 当我返回任何带有圆引号或撇号的内容时 它们显示为无法识
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 标准化 Unicode

    在Python中是否有一种标准方法来规范化unicode字符串 以便它只理解可用于表示它的最简单的unicode实体 我的意思是 可以翻译类似序列的东西 LATIN SMALL LETTER A COMBINING ACUTE ACCENT
  • 注释非法 Unicode 序列

    我曾经在一个处理 unicode 处理的 Java 应用程序上工作 像往常一样 我首先编写一些代码并测试它 然后注释掉工作代码并添加一些新行 这个过程一直持续到我找到解决方案 我遇到的确切问题是注释掉非法的 Unicode 字符串 有些 u
  • 如何用utf8发送邮件

    我想以 utf 8 编码发送此电子邮件的消息 我能为此做什么 include functions php name stripslashes POST name email trim POST email subject stripslas
  • Python中的Url解码UTF-8

    在 Python 2 7 中 给定一个类似的 URLexample com title D0 BF D1 80 D0 B0 D0 B2 D0 BE D0 B2 D0 B0 D1 8F D0 B7 D0 B0 D1 89 D0 B8 D1 8
  • 检测日语字符输入和“Romajis”(ASCII)

    我希望能够检测到用户何时 输入日语字符 汉字或假名 输入罗马字符 仅限 目前我正在使用这样的 ASCII 范围 C 语法 string searchKeyWord Console ReadLine var romajis from c in
  • 如何将任何语言和字符集的字符串转换为 Java 中的有效文件名?

    我需要根据用户输入的名称生成文件名 这些名称可以是任何语言 例如 约翰 史密斯 高岡和子 我爱你 这些是使用输入的值 因此我不能保证名称不包含文件名中无效的字符 用户将从浏览器下载这些文件 因此我需要确保文件名在所有配置的所有操作系统上都有
  • 为什么 Python 不能打印 Unicode 符号? [复制]

    这个问题在这里已经有答案了 可能的重复 Python UnicodeDecodeError 我是否误解了编码 https stackoverflow com questions 368805 python unicodedecodeerro
  • unicode 表情符号在 Chrome 上不显示

    当我将 unicode 表情符号插入 span 使用标准 jQuery 它们不会出现在 Chrome v48 中 但会出现在 Firefox v43 和 Safari v9 中 比较这些屏幕截图 CHROME FIREFOX 这里有什么解释
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she

随机推荐