QString 到 unicode std::string

2024-01-12

我知道有很多关于转换的信息QString to char*,但我仍然需要对这个问题进行一些澄清。

Qt提供QTextCodecs 要转换QString(内部以 unicode 形式存储字符)QByteArray,允许我检索char*它表示某种非 unicode 编码的字符串。但是当我想要获得unicode时我该怎么办QByteArray?

QTextCodec* codec = QTextCodec::codecForName("UTF-8");
QString qstr = codec->toUnicode("Юникод");
std::string stdstr(reinterpret_cast<const char*>(qstr.constData()), qstr.size() * 2 );  // * 2 since unicode character is twice longer than char
qDebug() << QString(reinterpret_cast<const QChar*>(stdstr.c_str()), stdstr.size() / 2); // same

上面的代码按照我的预期打印“Юникод”。但我想知道这是否是获取 unicode 的正确方法char* of the QString。尤其,reinterpret_cast这种技术中的 s 和大小算术看起来相当难看。


以下内容适用于 Qt 5。Qt 4 的行为有所不同,并且实际上已被破坏。

您需要选择:

  1. 是否需要8位宽std::string或 16 位宽std::wstring,或其他类型。

  2. 您的目标字符串需要什么编码?

在内部,QString存储 UTF-16 编码数据,因此任何 Unicode 代码点都可以用一个或两个表示QChars.

常见案例:

  • 本地编码 8 位std::string(如:系统区域设置):

    std::string(str.toLocal8Bit().constData())
    
  • UTF-8编码8位std::string:

    str.toStdString()
    

    这相当于:

    std::string(str.toUtf8().constData())
    
  • UTF-16 或 UCS-4 编码std::wstring,分别为 16 位或 32 位宽。 16 位与 32 位编码的选择由 Qt 完成,以匹配平台的宽度wchar_t.

    str.toStdWString()
    
  • C++11 的 U16 或 U32 字符串 - 从 Qt 5.5 开始:

    str.toStdU16String()
    str.toStdU32String()
    
  • UTF-16 编码 16 位std::u16string- 此 hack 仅在 Qt 5.4 之前需要:

    std::u16string(reinterpret_cast<const char16_t*>(str.constData()))
    

    此编码不包括字节顺序标记 (BOM)。

很容易将 BOM 添加到QString转换之前本身:

QString src = ...;
src.prepend(QChar::ByteOrderMark);
#if QT_VERSION < QT_VERSION_CHECK(5,5,0)
auto dst = std::u16string{reinterpret_cast<const char16_t*>(src.constData()),
                          src.size()};
#else
auto dst = src.toStdU16String();

如果您预计字符串很大,则可以跳过一份副本:

const QString src = ...;
std::u16string dst;
dst.reserve(src.size() + 2); // BOM + termination
dst.append(char16_t(QChar::ByteOrderMark));
dst.append(reinterpret_cast<const char16_t*>(src.constData()),
           src.size()+1);

在这两种情况下,dst现在可以移植到具有任一字节顺序的系统。

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

QString 到 unicode std::string 的相关文章

  • Qt Creator 2.8.1 Qt 5.1.1 Qt Designer Linux 显示新窗体

    我是 Qt 的初学者 所以希望这是一个容易回答的问题 我有相当多的 C 经验 这部分不是问题 我的应用程序的目的是进行代码生成 最初是为类制作头文件和实现文件 我非常喜欢 Code Blocks 上的类向导 但我认为我可以做更多的事情 我有
  • Qt:删除富文本

    对于明文有QFontMetrics elideText https doc qt io qt 5 qfontmetrics html elidedText https doc qt io qt 5 qfontmetrics html eli
  • 当从 html 文件读取 Unicode 内容时,为什么 Unicode 字体在 QTextBrowser 中无法正确显示?

    我正在读一本html文件 该文件基本上包含Unicode案文如下 b akko sati kru akkh ti khy abbahati b h b But the QText浏览器不解释Unicode字体 所以QText浏览器显示如下
  • 扩展 TabViewStyle styleData

    我目前正在尝试找到一种更好的方法来执行此操作 将图标添加到选项卡 现在 我正在放弃 styleData title 以包含图标源 但如果能够扩展 styleData 就更好了 这样我就可以包含其他自定义属性 这是我当前的黑客 Tab tit
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • wkhtmltopdf 修补了 qt 吗?

    我正在尝试将多个 URL 转换为 PDF 但是 当我编译 wkhtmltopdf 或运行时apt get install wkhtmltopdf并尝试一下 它说 错误 此版本的 wkhtmltopdf 是针对未修补的 QT 版本构建的 并且
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 如何在 Qt-Creator 中添加自定义构建步骤?

    构建我的应用程序后 我想将其复制到特定目录 在 Windows 7 上 自定义构建步骤 cmd exe c k copy MyPlugin dll HostApp Debug plugins 但我有错误 Can t run process
  • QPainterPath::arcTo 上的角度如何解释?

    我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始
  • 没有窗口的 GetFontUnicodeRanges

    有机会打电话吗GetFontUnicodeRanges没有窗户 例如 它可能是不允许与桌面交互的 Windows 服务 目前我正在使用控制台应用程序对此进行测试 program UnicodeConsoleOutput APPTYPE CO
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 无法将 [未定义] 分配给 QColor

    我正在使用 Qt 5 11 构建 运行代码 代码中有QML风格如下 Button style delegate Component id enabledButtonStyle ButtonStyle padding top 0 paddin
  • 如何解析从java文件中读取的unicode [重复]

    这个问题在这里已经有答案了 我编写了一个包含以下内容的文本文件 u0032 u0142o u017Cy u0142 然后我使用 FileReader 和 BufferedReader 来读取文件 public static void mai
  • Java ArrayList 的 (ArrayList).toString 的相反是什么?

    我正在使用toString的方法ArrayList储藏ArrayList数据到字符串中 我的问题是 我该如何走另一条路 是否有现有的方法可以解析中的数据String实例返回到ArrayList 最简洁的答案是不 没有简单的方法可以从字符串中
  • .NET:如何判断编码是否支持字符串中的所有字符?

    我需要输出大量文本 其中包括多种语言的各种字符 有时我需要以 Unicode 以外的字符编码 例如 Shift JIS 或 ISO 8859 2 输出文本 以便匹配它要访问的页面 如果文本中包含编码无法处理的字符 例如 ISO 8859 2
  • endl 不适用于 wstring (unicode)

    这是代码 std ofstream f file1 txt f lt lt 123 lt
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 当给定 100k 项时,QListView 需要很长时间才能更新

    我在读取文件时遇到问题 具体是我想制作一本小字典 在我需要阅读的文件中有这样的内容 a Ph P6 a snsr CA a b c fb Dj a b c book i BS A except B gate oOPa y a font kQ
  • Qt 和 MOC 的困境与简单的制作

    我想这更像是一个 GNU Make 问题 而不是 Qt 和 moc 但这里是 我有一个包含多个目录Q OBJECTS 我有一些简单的代码 它收集所有这些 例如 MOCS shell grep l Q OBJECT HEADERS Assum

随机推荐

  • 如何将 MIDAS.DLL 嵌入客户端可执行文件中

    据博士说 鲍勃 这是可以做到的 有人可以提供分步示例或教程吗 你没有嵌入MIDAS DLL 你添加MidasLib到你的项目的USES条款 这会将基本功能嵌入到您的程序中 而无需依赖单独的 DLL
  • 服务器控制行为异常

    我有一个我编写的服务器控件 通常工作正常 但是 当我添加突出显示的行时 它添加的不是一个而是两个 br 元素 这不是我所追求的 mounting new DropDownLabel mounting ID mountTypeList mou
  • 是否可以在 Adob​​e Flex 中执行#define?

    我正在寻找一种方法来执行类似于 adobe flex 中的 c c define 的操作 我希望项目构建可以采用许多不同的路径 具体取决于是否定义了某些内容 Flex 中存在这样的东西吗 我知道有一些方法可以设置全局变量 但这并不真正适合我
  • 反序列化Bson文件

    我有一个用 mongodump 工具生成的 Bson 文件 我想在 C 代码中反序列化 为此 我似乎可以使用 mongodb C 驱动程序或 Json net 库 我尝试了它们 但我无法让它们工作 使用 Json net 库 input 是
  • MySQL Sum() 多列

    我有一张学生记分卡表 这是桌子 subject mark1 mark2 mark3 markn stud1 99 87 92 46 stud2 studn 现在 我需要对每个学生的总分进行求和 我通过使用得到它sum mark1 mark2
  • MySQL 数据透视表列数据作为行

    我正在努力寻找解决这个 MySQL 问题的方法 我似乎不知道该怎么做 我有以下表格 Question table id question 1 Is it this 2 Or this 3 Or that Results Table id u
  • android 使用外部 java 库时出现 java lang verifyerror

    我在我的 android 项目中使用外部库 在调用导入该库的类时出现 javalang verify 错误 它是 java jxl 库 请提供帮助我在库项目中创建了一个名为 lib 的目录 然后在库中引用它 这个库与原始的 Android
  • .NET 中的全局变量(或替代方案)最佳实践

    在 VB NET WinForms 应用程序中存储全局变量的最佳实践是什么 例如 当用户登录应用程序时 您可能希望存储一个可以在整个应用程序中访问的 CurrentUser 对象 您可以将其存储为模块中的对象 或者创建一个包含所有所需全局变
  • 如何使用 Javascript 滚动到底部时附加更多行

    It s in 共享点2010年 但我认为它可能会正常运行 1 默认情况下 每页的项目限制为 30 因此 我已经完成了在页面加载时显示 30 行的列表 然后我将鼠标向下滚动到底部 它隐藏了最后 10 行 Summary 页面加载 30 行
  • ToList 方法不适用于 TrackableCollection

    我们正在 EF 4 0 之上与可跟踪实体合作 为了删除实体及其所有依赖实体 我正在编写一个通用的DeleteDependentEntities 以便从EntityManager 中的Delete 方法调用 我们不 或者不想 依赖于在数据库中
  • 从数据库字段中删除特殊字符

    我有一个包含数千条记录的数据库 我需要删除其中一个字段以确保它只包含某些字符 字母数字 空格和单引号 我可以使用什么 SQL 从整个数据库的该字段中删除任何其他字符 例如斜杠等 update mytable set FieldName RE
  • Angular 7 - 我是否创建了太多订阅?

    我想知道我的代码是否会造成内存泄漏 Context 我有一个应该显示 应用程序 对象的组件类 它具有过滤和分页功能 我创建了一个方法加载应用程序数据 其中我订阅到 向 Web 服务发出请求后返回的 Observable 该方法在初始化时被调
  • 如何配置 spring-kafka 忽略格式错误的消息?

    我们的 Kafka 主题之一存在问题 该主题被DefaultKafkaConsumerFactory ConcurrentMessageListenerContainer组合描述here http docs spring io spring
  • 如何在 Firebase Cloud Storage 上创建存储桶

    我是一名 python 开发人员 我们使用 GCS Google 云存储 来存储过去几个月的图像 这很好 但对于 Android 来说 它需要将所有存储桶导入 Firebase Cloud Storage FCS 才能访问它 我们不需要任何
  • MySQL 中的字段递增是原子操作吗?

    我正在制作一个网站 我想在标准 MyISAM 表中增加一个计数器 简化示例 UPDATE votes SET num num 1 如果多个连接执行相同的查询 这会导致问题吗 或者 MySQL 会处理它并锁定表或其他措施以确保不存在冲突吗 写
  • Android ListView 项目在滚动时重叠

    我已经实施了一个ListView在我的应用程序中使用自定义实现CursorAdapter 我的问题是 每当我快速滚动到列表底部 启动应用程序后 有时我会发现所有绘制的 ListView 项目都相互重叠 如果我向后滚动或触摸其中一项 它们就会
  • 为什么我的数组无法正确打印? [复制]

    这个问题在这里已经有答案了 我正在尝试使用下面的代码编写一个简单的程序来创建一个一维数组 然后您可以使用索引号调用一个值 我在用java questions tagged java and eclipse questions tagged
  • 如何计算带有集合的列表中项目的出现次数?

    假设我有一个List
  • 如何在不停止单元格选择动画的情况下重新加载 UITableView

    当用户点击某个单元格时 我想更新我的UITableView 包括这个被点击的单元格的内容 最简单的方法是更新内部参数然后调用 self tableView reloadData 然而 reloadData立即停止我点击的单元格的漂亮的蓝色
  • QString 到 unicode std::string

    我知道有很多关于转换的信息QString to char 但我仍然需要对这个问题进行一些澄清 Qt提供QTextCodecs 要转换QString 内部以 unicode 形式存储字符 QByteArray 允许我检索char 它表示某种非