Windows Unicode C++ 流输出失败

2024-05-02

我目前正在编写一个应用程序,它要求我在任意窗口上调用 GetWindowText 并将该数据存储到文件中以供以后处理。长话短说,我注意到我的工具在《战地 3》上失败了,我将问题范围缩小到窗口标题中的以下字符:http://www.fileformat.info/info/unicode/char/2122/index.htm http://www.fileformat.info/info/unicode/char/2122/index.htm

所以我创建了一个小测试应用程序,它只执行以下操作:

std::wcout << L"\u2122";

瞧,这会中断程序其余部分到控制台窗口的输出。

当 MessageBoxW 等 API 正常显示该字符(我假设还有其他字符)时,为什么 MSVC STL 会卡住?

如何将这些字符打印到我的文件中?

在 Windows 7 x64 下的 VC10 和 VC11 上进行了测试。

抱歉,这篇文章的结构很糟糕,我在这里撕扯我的头发。

Thanks.

EDIT:

最小测试用例

#include <fstream>
#include <iostream>

int main()
{
  {
    std::wofstream test_file("test.txt");
    test_file << L"\u2122";
  }

  std::wcout << L"\u2122";
}

预期结果:“™”字符打印到控制台和文件。 观察结果:文件已创建但为空。没有输出到控制台。

我已经确认我的控制台使用的字体能够显示有问题的字符,并且该文件肯定是空的(大小为 0 字节)。

EDIT:

进一步的调试显示“failbit”和“badbit”已在流中设置。

EDIT:

我也尝试过使用 Boost.Locale,即使新的区域设置全局且明确地渗透到所有标准流,我也遇到同样的问题。


要写入文件,您必须正确设置区域设置,例如,如果您想将它们写入为 UTF-8 字符,则必须添加

const std::locale utf8_locale
            = std::locale(std::locale(), new std::codecvt_utf8<wchar_t>());
test_file.imbue(utf8_locale);

您必须添加这 2 个包含文件

#include <codecvt>
#include <locale>

要写入控制台,您必须通过添加以下内容将控制台设置为正确的模式(这是特定于 Windows 的)

_setmode(_fileno(stdout), _O_U8TEXT);

(如果您想使用 UTF-8)。

为此,您必须添加这两个包含文件:

#include <fcntl.h>
#include <io.h>

此外,您必须确保您使用的字体支持 Unicode(例如 Lucida Console)。您可以在控制台窗口的属性中更改字体。

完整的程序现在如下所示:

#include <fstream>
#include <iostream>
#include <codecvt>
#include <locale>
#include <fcntl.h>
#include <io.h>

int main()
{

  const std::locale utf8_locale = std::locale(std::locale(),
                                    new std::codecvt_utf8<wchar_t>());
  {
    std::wofstream test_file("c:\\temp\\test.txt");
    test_file.imbue(utf8_locale);
    test_file << L"\u2122";
  }

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

Windows Unicode C++ 流输出失败 的相关文章

  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 串行 I/O 与 Windows/Windows CE 重叠/不重叠

    抱歉 这不是一个大问题 但更多的是帮助那些在这些特定问题上遇到问题的人 我正在解决的问题需要使用串行 I O 但主要在 Windows CE 6 0 下运行 然而 最近有人问我该应用程序是否也可以在 Windows 下运行 所以我开始着手解
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C

随机推荐

  • Scala Swing 库的问题

    您好 我在 2 8 Beta1 prerelease 版本中使用 Scala Swing 库时遇到问题 我有一种情况 我想在 GUI 中显示一个表 并在 SQL 请求返 回结果时更新它 在 Scala 中可以通过哪种方式完成此操作 目前我正
  • JQuery:如果自定义类包含大于“x”的数字,请添加 CSS 代码

    我想将 css 添加到指定的跨度类 如果它包含高于 55 的数字 而且这必须在页面加载上而不是按钮触发器上 谢谢任何帮助都会很棒 示例如下 目前不起作用 span class subTotalPrice 10 span span class
  • 在Java中,什么时候调用枚举常量的构造函数?

    要使用 Java 中的一个人为示例 代码如下 enum Commands Save S File F private String shortCut private Commands String shortCut this shortCu
  • 如何在Spring JPA中为审计字段@CreatedDate、@LastModifiedDate保存UTC格式的时间戳

    这是我的带有审计字段的实体的基类 对于字段 CreatedDate LastModifiedDate 默认情况下它会节省我的系统时间 我的要求是以 UTC 格式保存时间戳 有人有解决这个问题的方法吗 import java time Loc
  • 如何让我的应用程序出现在应用程序选择器中?

    我想宣传一下 我的应用程序能够查看 pdf 文件 这样当从文件管理器中选择 pdf 文件时 它就会出现在应用程序选择器中 这是我的意图过滤器的样子
  • 如何禁用 mui 文本字段自动完成?

    我正在使用最新版本的 mui 我有一个包含邮政编码字段的用户联系信息表单 如果值为空 我不希望此字段自动完成 但它会随着浏览器中保存的电子邮件自动完成 这是我到目前为止所尝试过的 自动完成 关闭 自动完成 关闭 自动完成 不 这是我的文本字
  • 使用 Cypher,如何返回仅包含其属性子集的节点

    假设我在 Neo4j 中创建了一个节点 CREATE Thing a foo b bar 我可以编写一个查询来获取该节点及其所有属性 MATCH n Thing a foo RETURN n 返回 a foo b bar 但是是否可以匹配一
  • 如何去掉gridview中的空格

    这件事已经困扰我有一段时间了 我似乎无法解决它 我有一个网格视图 在其中显示一些位图 通过适配器填充图像视图时 我在所有图像侧面添加了 5dp 的填充 iv setPadding 5 5 5 5 但不知何故 每个图像的顶部和底部都添加了更多
  • Android:如何以编程方式打开和关闭屏幕?

    在将这篇文章标记为 重复 之前 我写这篇文章是因为没有其他文章可以解决该问题 我正在尝试关闭设备 然后在几分钟或传感器发生变化后 将其重新打开 关闭显示测试 我可以使用以下方法关闭屏幕 params flags LayoutParams F
  • 在 Google Data Flow 上的 Spring Boot 项目中运行 Apache Beam 管道

    我正在尝试在 Google Data Flow 上的 Spring Boot 项目中运行 Apache Beam 管道 但我一直遇到此错误Failed to construct instance from factory method Da
  • 如何在 BlobStore 中设置文件名属性?

    我正在以编程方式上传图像文件并想要设置文件名 当我通过 POST 上传文件时 文件名属性会自动设置 但是 当使用下面的方法时 文件名未设置 image urllib2 urlopen url file name files blobstor
  • Google Play 商店中不支持的设备 - Flutter

    我已将我的应用程序上传到谷歌商店 但我的一些朋友无法安装它 他们得到 您的设备与此版本不兼容 我已经检查了sdk 屏幕尺寸和权限要求 也将uses features required设置为false 但仍然有一些设备无法安装它 我在游戏控制
  • 如何在 ASP.NET MVC 中构建选项卡式菜单?

    我想构建一个与 StackOverflow 的配置文件管理非常相似的选项卡式菜单 选项卡式菜单 StackOverflow http img410 imageshack us img410 3037 image1nw r jpg http
  • 使用 OpenMP 时无用的 printf 没有加速

    我刚刚编写了第一个 OpenMP 程序 它并行化了一个简单的 for 循环 我在双核机器上运行代码 发现从 1 个线程变为 2 个线程时速度有所提高 然而 我在学校 Linux 服务器上运行相同的代码并没有看到加速 在尝试了不同的事情之后
  • UNION ALL mysql 子句中的行默认顺序?..我的意思是,首先提取哪一行?

    例如 如果我有一个真正简单的查询 选择1 联合所有 选择2 然后通过 Perl 或 PHP 获取行 我会将 1 作为第一行 将 2 作为第二行吗 这种行为在任何地方都有描述吗 Thanx 没有默认顺序 无论是在表中还是在查询中 除非您使用
  • 如果循环符号链接没有用,那为什么允许它们呢?

    我刚刚在这里读这篇文章 类 Unix 系统中的循环符号链接有何用途 https stackoverflow com questions 12680821 what are circular symlinks in unix like sys
  • 从 URL 加载 Xml 时出现超时错误

    我正在执行将实时 xml 文件 从实时 url 加载到 XmlDataDocument 的任务 但每次我都会收到错误 操作已超时 代码如下 包含xml feeds的url 我想将其加载到xmlDoc中 XmlDataDocument xml
  • Oracle:在更新具有多列的表的一个字段时复制行

    有没有一种方法可以一般复制一行 特别是在不指定所有列的情况下 在我的情况下 我有一个大表 我想在其中复制除 ID 和另一列之外的所有列 事实上 数据是在年初复制的 该表有 50 多列 因此如果我不必指定所有列 则更改架构会更加灵活和稳健 这
  • 扩展程序上传后,typo3 网站离线[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我刚刚向typo3 网站上传了一个新扩展 该网站就离线了 我收到 500 内部服务器错误 我可以做什么来倒回操作和 或使
  • Windows Unicode C++ 流输出失败

    我目前正在编写一个应用程序 它要求我在任意窗口上调用 GetWindowText 并将该数据存储到文件中以供以后处理 长话短说 我注意到我的工具在 战地 3 上失败了 我将问题范围缩小到窗口标题中的以下字符 http www filefor