如何在 C++17 中读取 UTF-16 文本文件

2023-12-25

我对 C++ 很陌生。我想在 Visual Studio 2019 中读取 C++17 中的 UTF-16 文本文件。

我在互联网上尝试了几种方法(包括StackOverflow),但没有一个起作用,并且其中一些无法编译(我认为它们只支持较旧的编译器)。

我试图在不使用任何第三方库的情况下实现这一目标。

这会读取一个文本文件,但它在每个字母之间有一些奇怪的字符和空格。

// open file for reading
std::wifstream istrm(filename, std::ios::binary);
if (!istrm.is_open()) {
    std::cout << "failed to open " << filename << '\n';
}
else {
    std::wstring s;
    std::getline(istrm, s);
    std::wcout << s << std::endl;
}

然后我使用以下库找到了一些解决方案

#include <locale>
#include <codecvt>

// open file for reading
std::wifstream istrm(filename, std::ios::binary);
istrm.imbue(std::locale(istrm.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>));
if (!istrm.is_open()) {
    std::cout << "failed to open " << filename << '\n';
}
else {
    std::wstring s;
    std::getline(istrm, s);
    std::wcout << s << std::endl;
}

这次甚至没有编译,出现以下错误std::codecvt_utf16 line:

错误 C4996 'std::codecvt_utf16':警告 STL4017:std::wbuffer_convert、std::wstring_convert 和标头(包含 std::codecvt_mode、std::codecvt_utf8、std::codecvt_utf16 和 std::codecvt_utf8_utf16)已弃用在 C++17 中。 (std::codecvt 类模板并未弃用。)C++ 标准不提供等效的未弃用功能;考虑使用 MultiByteToWideChar() 和 WideCharToMultiByte() 代替。您可以定义 _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING 或 _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS 以确认您已收到此警告。

如果有人可以为此提供解决方案,我将不胜感激。

提前致谢。


首先,阅读相关问题,例如std::wstring 在 Windows 上支持 UTF-16 和 UTF-32 吗? https://stackoverflow.com/questions/25938373/does-stdwstring-support-utf-16-and-utf-32-on-windows and 16 位 wchar_t 是否正式有效用于表示完整的 Unicode? https://stackoverflow.com/questions/39548465/is-16-bit-wchar-t-formally-valid-for-representing-full-unicode.

如果您想要的只是将字符串作为 blob 读取/写入(您已经知道其编码为 UTF-16),而不执行任何转换或操作,并且您处于 Windows 上的 Visual Studio 2019 等环境中,wchar_t旨在保存 UTF-16 https://learn.microsoft.com/en-us/windows/desktop/learnwin32/working-with-strings,那么您可以使用 C++ 宽字符串和流。

现在,如果您需要执行转换、支持多种编码、在字符串内迭代(对于迭代的某些定义),或者一般来说任何不平凡的事情,如果您想留在 C++17 中,那么您现在就不走运了。 C++ 标准委员会已经成立了 Unicode 工作组,因此期待看到some未来几年这方面的改进。目前,您需要使用 Win32 函数,例如MultiByteToWideChar and WideCharToMultiByte,或外部库,例如 International Components for Unicode (ICU) 或 Boost 的 Locale。

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

如何在 C++17 中读取 UTF-16 文本文件 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 随机添加到 Xcode 方案中的构建目标

    我正在使用 Xcode 5 和 CocoaPods 开发 iPhone 应用程序 我有一个计划和目标称为Oahu我对其进行测试 因此 看到我的两个测试目标在该方案的构建阶段构建 我并不感到惊讶 但是 有第四个构建目标无法删除 当我运行测试时
  • 在 TypeScript 的类方法中使用类型谓词

    我有一个这样定义的类 class Foo value string null constructor this value null private ensureValueExists this value is string type p
  • “String”模块对象没有属性“join”

    所以 我想在 Pygame 中创建一个用户文本输入框 我被告知要查看一个名为 inputbox 的类模块 所以我下载了 inputbox py 并导入到我的主游戏文件中 然后我在其中运行一个函数并收到错误 Traceback most re
  • CSS 选择器在 :not 选择器的最后一个匹配情况后将 css 添加到下一个位置

    这是我的 HTML 代码 div class body page check in list div class body page check in item checked a div div class body page check
  • 如何将 HTML 元素传递给 React 中的高阶函数 (HOC)?

    我经常使用HOCs https reactjs org docs higher order components html为现有的 React 组件提供附加功能 这非常简单 import Component from path to Com
  • Firebase Crashlytics 不报告崩溃

    I have 成功集成 Firebase进入我的项目 身份验证和存储效果很好 但是在简单集成 Crashlytics 并故意崩溃我的应用程序之后 而不是故意 没有崩溃报告出现在崩溃仪表板中 我确实在 Logcat 中看到 D Firebas
  • Shopify CDN 的资产 URL 是如何生成的?

    假设我上传了一张名为 logo png 的图像到 Shopify 上的商店 在 Liquid 模板中 我可以为其生成一个 URL 如下所示 logo png asset url 这会生成一个 URL 例如 http static shopi
  • 使用 sql 连接查询还是使用 pandas 合并查询,哪一种更高效?

    我想在一个表中使用多个表中的数据pandas dataframe 我有两种从服务器下载数据的想法 一种方法是使用SQL连接和检索数据 一种方法是单独下载数据帧并使用 pandas merge 合并它们 SQL Join 当我想将数据下载到p
  • 脚本运行时执行时间限制

    我的 Google Apps 脚本正在迭代用户的 Google 云端硬盘文件 并将文件复制 有时将其移动到其他文件夹 该脚本总是在几分钟后停止 并且日志中没有错误消息 编者注 时间限制随着时间的推移而变化 并且 消费者 免费 和 工作空间
  • MVC .NET 上的 ajax post 未正确传递数组

    我有一个简单的模式 它使用 select2 从服务器获取产品列表 用户可以选择多个产品 然后点击 确定 来优化搜索 我的以下设置从模式中获取数据 并使用强类型视图模型对控制器操作执行 ajax 调用 该视图模型与 JS 尝试通过 ajax
  • C++反向整数序列实现

    谁知道如何实现C std make index sequence反向版本 要得到 make index sequence reverse
  • 使用嵌套类创建类的 Javascript JSON

    我想在 JavaScript 中创建一个具有嵌套对象的 JSON 对象 以下是课程 public class CellChanged private CellLocation Location null private double Cel
  • 引起原因:org.hibernate.HibernateException:找到对集合的共享引用

    我正在运行这个异常 Caused by org hibernate HibernateException Found shared references to a collection path Object listObjects 这是我
  • 如果两项服务位于同一区域,AWS 是否会产生跨账户数据传输费用?

    我想将数据从一个账户中的 EC2 机器传输到另一个账户中的 S3 存储桶 在这里 两个服务都位于同一区域 由于两者都在不同的帐户上 因此数据传输是否通过互联网进行 是的 如果 ec2 和 s3 位于不同区域 无论同一帐户或不同帐户 数据传输
  • JavaScript 数组克隆

    我有这种方法来制作数组 var playerList exports player function socket name this id socket id this name name this x 20 this y 40 retu
  • 单击时功能区按钮不会触发 onAction 设置的事件

    我设计了一个 Outlook 2010 加载项 在其中尝试触发 或者更确切地说 捕获 单击按钮时触发的事件 如图所示在本文中 http social msdn microsoft com Forums en US vsto thread a
  • 回退到 TURN 的连接的预期百分比是多少?

    假设我搭建了WebRTC视频聊天网站 握手后有些连接 ICE Candidates 会直接p2p 有些会使用STUN服务器 有些会使用 最后手段 TURN服务器来建立连接 与直接连接和 STUN 连接 免费 相比 基于 TURN 服务器的连
  • 使用 NIB 文件会导致性能损失吗?

    我很想知道是否有人有经验比较 iPhone 应用程序与 NIB 中布局的视图与完全以编程方式布局的视图 即实例化 UITextView 将其添加到视图 实例化 UIButton 将其添加到视图 的加载时间性能 如果我想要加载一个简单的应用程
  • numpy 有没有办法测试矩阵是否为酉矩阵

    我想知道 numpy 中是否有任何函数可以确定矩阵是否为酉矩阵 这是我写的函数 但它不起作用 如果你们能发现我的函数中的错误和 或告诉我另一种方法来确定给定矩阵是否是单一的 我将不胜感激 def is unitary matrix np n
  • 如何在 C++17 中读取 UTF-16 文本文件

    我对 C 很陌生 我想在 Visual Studio 2019 中读取 C 17 中的 UTF 16 文本文件 我在互联网上尝试了几种方法 包括StackOverflow 但没有一个起作用 并且其中一些无法编译 我认为它们只支持较旧的编译器