在 Visual C++ 2013 中使用 wifstrem Shift-JIS 解码失败

2023-12-02

我正在尝试使用 std::wifstream 和 std::getline 读取以 Shift-JIS (cp 932) 编码的文本文件。以下代码在 VS2010 中有效,但在 VS2013 中失败:

std::wifstream in;
in.open("data932.txt");

const std::locale locale(".932");

in.imbue(locale);

std::wstring line1, line2;
std::getline(in, line1);
std::getline(in, line2);
const bool good = in.good();

该文件包含多行,其中第一行仅包含 ASCII 字符,第二行是日语脚本。因此,当这段代码运行时,line1应包含 ASCII 行,line2日语脚本,以及good应该是真的。

在VS2010中编译,结果符合预期。但是在VS2013中编译时,line1包含 ASCII 行,但是line2是空的,并且good是假的。

我调试到 CRT(因为 Visual Studio 提供了源代码),发现一个名为_Mbrtowc(在文件xmbtowc.c中)在两个版本之间进行了修改,并且它们用于检测双字节字符的前导字节的方式发生了变化,VS 2013中的检测不到前导字节,因此无法解码字节流。

进一步的调试揭示了一个点,其中_Cvtvec对象的_Isleadbyte数组被初始化(在函数中_Getcvt(),在文件 xwctomb.c 中),并且初始化会产生错误的结果。它似乎总是使用代码页 1252,这是我系统上的默认代码页,而不是为正在使用的流设置的 932。然而,我无法确定这是否是设计使然,并且我错过了一些获得良好结果所需的步骤,或者这确实是 VS2013 的 CRT 中的一个错误。

不幸的是我没有安装VS2012,所以我无法在该版本上进行测试。

欢迎对此主题有任何见解!


我找到了一个解决方法:如果为了创建区域设置,我显式更改全局 MBC 代码页,则区域设置会正确初始化,并且会按预期读取和解码行。

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

在 Visual C++ 2013 中使用 wifstrem Shift-JIS 解码失败 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 如何启用 vstest.console.exe 日志记录?

    我试图查看在 Visual Studio 2013 中运行测试时究竟执行了什么 vstest 命令 如何启用 vstest console exe 日志记录 执行的命令是带有相关参数的 VSTest Console exe 当您运行测试时
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • 如何使用函数参数作为变量的一部分?

    这有效 chrome storage local get sizePref function items Get size preferences from storage var sizePref2 items sizePref tops
  • Laravel Eloquent 无法使用复合主键保存模型

    当定义复合主键然后在实例化模型上调用 save 时 会引发异常 ErrorException E UNKNOWN PDO lastInsertId expects parameter 1 to be string array given 错
  • 使用 Java Servlet API 发送 100 继续

    是否可以发送 100 Continue HTTP 状态代码 然后在使用 Java Servlet API HttpServletResponse 处理整个请求后发送一些其他状态代码 我找不到任何明确的 否 答案 尽管 API 似乎不支持它
  • Python 如何打印列表的列表

    我想用下面的代码打印 python 3 x 中的列表列表 但它给出了错误 lol 1 2 3 4 5 6 five six for elem in lol print join elem this is the error I am get
  • cabal 沙箱 v. 全局包数据库

    在 cabal 沙箱内安装时 cabal 仍将使用全局包数据库中的包 特别是来自 Haskell 平台的包 这可能会导致安装冲突 是否可以配置 cabal 来忽略全局包 db 我看到相应的功能已经实现了ghc本身 通过 no global
  • 使用 3D 变换翻转在 IE11 中不起作用(我的不同)

    我研究了 CSS3 3d 变换 最后得到了一些 CSS3 3d 翻转动作的代码 所以它在所有浏览器中都工作正常 除了互联网浏览器 IE11 所以我在 stackoverflow com 上调查了这个问题 我得到了一些解决方案 但不幸的是这些
  • Span 的“ScrollWidth”属性在 Chrome 上不起作用吗?

    我有一个跨度 里面有一些文本 document getElementById span1 scrollWidth 在 Firefox 上返回 100 作为滚动宽度 但 Chrome 仅返回 0 Chrome 不支持这个 scrollWidt
  • 解析sql中的JSON字符串

    我的表中有一列 JSON 字符串 我使用的是 SQL Server 2008 关于如何解析 JSON 字符串并提取特定值的任何想法 这是我的 JSON 字符串 id 1234 name Lasagne al frono descriptio
  • Rails 3.1 link_to 未正确显示确认或销毁

    我一直在研读 Railstutorial org 上的章节并使用 Rails 3 1 3 因为我很疯狂和 或想要挑战 我设法轻松地解决了大多数版本问题 但这个问题困扰了我一段时间 在10 4 2中 Michael Hartl使用以下代码删除
  • 如何像口语一样将数字转换为文本?

    如果值以百万为单位 那么字符串应该是 miliion thousand hundred 我使用了这段代码 但它显示的是百万值 如何解决这个问题 convert to words NSString wordNumber NSNumber nu
  • 如何在未聚焦的 WinForms TextBox/RichTextBox 中显示光标?

    我需要在 WinForms 应用程序的 RichTextBox 控件中显示光标 即使它没有焦点 我怎样才能做到这一点 我只找到了WPF的方法 如何在未聚焦时保持 WPF 文本框选择 您可以使用 WinAPI DllImport user32
  • 有没有什么方法可以获取没有查询字符串的 URL?

    我有一个像这样的网址http localhost dms mduserSecurity UIL index php menu true submenu true pcode 1235 我想获取不带查询字符串的 URL http localh
  • 使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶

    我正在尝试使用 Node js 将文件从 AWS S3 存储桶复制到另一个存储桶 问题是如果文件名没有空格 例如 abc csv 它工作正常 但如果我要复制到的文件的文件名中有空格 例如 abc xyz csv 它抛出以下错误 指定的密钥不
  • Phonegap、textarea不接受输入

    这是一个 Noob Gingrich 的问题 很确定我错过了一些简单的东西 有没有让文本区域在移动设备上工作的技巧 我所说的工作是指接受来自软键盘的文本 我在phonegapbuild 上有一个移动应用程序 在一页上有一个包含文本框和文本区
  • MATLAB 事件和无限休眠或检查循环

    我需要在目录中的文件进入时对其进行数据分析 我想知道如果这样更好 在目录上实现事件监听器 并在激活时启动分析过程 然后让程序永远进入睡眠状态 while true sleep 1e10 end 或者有一个循环轮询更改并做出反应 我个人更喜欢
  • C# 使用唯一的自定义数据 FCM 向设备组发送通知

    我知道我可以提供registration ids将 JSON 请求以字符串数组的形式发送到多个设备 但是 我有一个独特的令牌 我想将其发送给每个人registration ids 如何实现这一目标 而无需简单地循环发送我希望发送到的设备数量
  • 从“后退”按钮中删除文本,保留图标

    我想从后退按钮中删除文本 但我想保留图标 我努力了 let backButton UIBarButtonItem title style UIBarButtonItemStyle Plain target navigationControl
  • 从 Android 到 Web API 的 POST 数据返回 404

    我尝试将数据从 Android 客户端作为 POST 请求发送到我的 Web API 后端 但它返回 404 响应代码 这是我的代码 Backend HttpPost Route api postcomment public IHttpAc
  • 自定义视频录制屏幕

    我正在尝试实现一个应用程序 该应用程序在启动时使用我的自定义视频录制屏幕自动开始视频录制 并使用我自己的按钮来停止录制和其他按钮 到目前为止 我所做的是设计带有按钮的布局 但如何在后台添加视频录制屏幕 请帮忙 这就是我实现它的方法 publ
  • 在 Visual C++ 2013 中使用 wifstrem Shift-JIS 解码失败

    我正在尝试使用 std wifstream 和 std getline 读取以 Shift JIS cp 932 编码的文本文件 以下代码在 VS2010 中有效 但在 VS2013 中失败 std wifstream in in open