问题标签 [wofstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 排版撇号 + 宽字符串文字破坏了我的 wofstream (C++)
在处理不祥的印刷撇号(')时,我刚刚遇到了一些奇怪的行为——而不是打字机撇号(')。与宽字符串文字一起使用时,撇号会中断 wofstream。
此代码有效
==> A'B
此代码有效
==> A'B
此代码失败
==> 一个
此代码失败...
==> 一个
任何想法 ?
c++ - C++ unicode 问题
我知道 ICU 和代码项目中的 utf8 之类的小型库(忘记确切名称),但是这些都不是我想要的。
我真正想要的是像重症监护室这样的东西,但以更友好的方式包裹起来。
具体来说:
- 完全面向对象
- c++ 标准流的实现,或者至少执行相同角色的东西。
- 可以以与地区相关的方式格式化时间、日期等(例如,英国的 dd/mm/yy 和美国的 mm/dd/yy)。
- 让我选择字符串的“内部”编码,例如,我可以让它在 windows 上使用 UTF-16,以避免在 windows API 和 DirectX 之间传递字符串时进行大量转换
- 在编码之间轻松转换字符串
如果不存在这样的库,是否可以使用标准 c++ 类来包装 ICU,因此我可以创建一个与 std::string 和 std::wstring 具有相同用法的 ustring,并且还可以实现流的版本(最好让它们与现有的完全兼容,即我可以将它传递给一个期望 std::ostream 的函数,它会在其内部格式和 ascii(或 utf-8)之间进行转换)?假设有可能做多少工作?
编辑:还查看了 c++0x 标准并注意到 utf8、utf16 和 utf32 的文字,这是否意味着标准库(例如字符串、流等)将完全支持这些编码以及它们之间的转换?如果是这样,有人知道 Visual Studio 支持这些功能需要多长时间?
EDIT2:至于使用现有的 c++ 支持,我将查找语言环境和方面的内容。
我遇到的一个问题是,当使用围绕 wchar_t 定义的流时,它在 windows 下是 2 个字节用于文件 i/o,但是它似乎仍然对它们自己的文件使用 ascii。
在文件48 65 6C 6C 6F 20 57 6F 72 6C 64 0D 0A中产生以下十六进制,
这显然是 ascii 而不是预期的 utf-16 输出:
FF FE 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 72 00 6C 00 64 00 0D 00 0A 00
g++ - Windows 上的 iostream、wifstream 和 eclipse/g++
我在带有 MinGW 工具链(g++ 等)的 Windows 上使用 Eclipse。我有一个基于 darwin 构建的程序,它使用 wifstream 和 wofstream 读取和写入文件。该程序在 darwin (Mac) 上使用 eclipse 编译和工作...对于我的问题没有。
当我将代码移到 Windows 并尝试使用 MinGW 工具链和 eclipse 进行构建时,我在 wifstream、wofstream 和 wcout 上遇到编译错误。定义为 wstring 的变量编译得很好。
例如:
wifstream inFile; inFile.open(argv[2], ios_base::in);
导致编译错误
..\src\pdConv.cpp:31: 错误: `wifstream' 未在此范围内声明
这似乎表明编译器认为 wifstream 是一个变量。我确实注意到包含文件中未启用 _GLIBCXX_USE_WCHAR_T 指令。我需要自己定义它还是环境中的某些东西应该知道这一点?如果我手动定义它,那么看来我不能在同一个程序中同时使用宽和窄实现。
这可能很明显,但我已经被这个问题困了很久......大声笑..我在这里错过了什么?
c++ - 为什么 C++ 中的宽文件流默认会缩小写入数据的范围?
老实说,我只是没有在 C++ 标准库中得到以下设计决策。将宽字符写入文件时,wofstream
转换wchar_t
为char
字符:
我知道这与标准有关codecvt
。有codecvt
for utf8
in Boost
。此外,Martin York 在 SO 上有一个codecvt
for 。问题是为什么要转换宽字符?为什么不按原样写字符!utf16
standard codecvt
另外,我们是要真正unicode streams
使用 C++0x 还是我在这里遗漏了什么?
c++ - 为什么我的 std::wofstream 写 ansi?
我有很宽的字符串,我正在将它写入我以 out|binary 模式打开的 wofstream。当我查看生成的文件时,它每隔一个字节就丢失了。
我期待当我使用二进制编辑器在 Visual Studio 中打开文件时,我会看到每隔一个字节都为零,但我没有看到零。
你知道我错过了什么吗?
谢谢。
代码是这样的:
c++ - UTF-16 编码类型,在 Windows 中使用 wofstream
最近想在Windows下用unicode(UTF-16)写一个文本文件。
通过参考http://www.codeproject.com/KB/stl/upgradingstlappstounicode.aspx,这是我正在应用的代码。
当我使用记事本打开文档时,这里是显示。换行符似乎消失了!!!
(来源:google.com)
当我使用 Firefox 并选择了 UTF-16 编码时,这里是显示。
(来源:google.com)
我尝试在JEdit下打开,使用如下编码
- UTF-16 - 不。垃圾陈列。
- UTF-16BE - 不。垃圾陈列。
- UTF-16LE - 很好。能够显示多行。
我的猜测是,我需要提供额外的字节排序信息吗?但是怎么做?
我的目标是让这个 UTF-16 文档能够在记事本下很好地显示,因为我的客户只是喜欢使用记事本。
P/S 请!永远不要建议我使用 UTF-8。谢谢你。
c++ - 运行时检查失败 #2 C/C++
我在程序中遇到了一个让我有些难过的问题。我有一个运行良好的程序(它在 VS 2010 上运行良好,这不是我升级到 .NET 并且这个错误开始发生后)的程序主要是 c 和一些 c++(我的老板讨厌面向对象,因为它通常涉及调用他偏执的库,微软将停止支持,如果他们有旧版本,也必须将其交付给客户,这可能是一个问题,因为其中很多是政府,他还认为这些调用导致不必要的开销,所以我必须尽量避免它)然后我取消注释了一段代码(我将把这个代码块发布得低一点,因为它已经从我未注释的原始代码中修改了一些)开始处理它并得到错误“
我试图通过实施一些不太好的修复来找出问题所在,因为如果一个有效的修复,我将知道实际问题是什么,然后有一个良好的调试基础起点。首先,我尝试增加 std 的大小以使其足够大,以至于我不会放置比它可以处理的更大的字符串(它的值来自列表视图中不超过 3 列,每个列都不能大于 80 个字符),即使这让我更少地得到错误,我仍然得到它。
所以我尝试将该代码块中的 std 切换为 msg(与当时的 std 完全相同)以查看 msg 是否有相同的错误(这意味着它是由该代码块产生的)但错误仍然出现围绕标准。
这让我觉得也许它只是在 std 周围的金丝雀上写了一些其他变量,所以我在用 msg 替换它的所有实例后将其注释掉(对于那些它是尚未得到的函数的局部变量的执行当错误发生时调用)但这只是导致错误出现在 msg 周围(实际上也显示为函数的局部变量)。
接下来,我尝试使用 static 在堆而不是堆栈上声明 msg(因为使用 new 会涉及到我的老板非常讨厌现代代码),但这只会导致以下错误发生:“HTZx86.exe 中 0x00300030 处的未处理异常:0xC0000005:访问冲突读取位置 0x00300030。” 在位置 0x00300030 是对我无法控制的外部 API 的调用。
现在,在我对代码的其他部分进行了一些不相关的修改之后,我同时随机获得了 std 和 msg 周围的堆栈错误(有时在函数调用之后,有时在之前),而不是在一致的基础上。我想知道是否有任何好的方法来调试这个问题,因为单独的断点对我没有帮助,调用堆栈也没有帮助(尽管我可能使用错误)?
下面是变量的声明,也是在调用函数之前唯一可以调用的地方:
声明:
和其他电话:
PS ExternalAPIFunction1 是存在访问冲突的那个。
c++ - 将 wstring 写入希伯来语/阿拉伯语文件的问题
我想使用 xerces 解析器阅读希伯来语(unicode)。我能够读取 XMLCh 中的值。但是,在将其写入另一个文件时,我得到了 gargabe 值。我尝试使用 ofstream、wofstream 但没有帮助。
让我知道你的建议
c++ - 使用 std::wofstream 写入文件。该文件仍然是空的
我使用 VS2008 编写了以下程序:
当我尝试编译它时,IDE 询问我是否想以 unicode 格式保存我的源文件,我说“是的,请”。
然后我运行程序,myfile 出现在我的项目文件夹中。我用记事本打开它,文件是空的。我记得记事本只支持 ASCII 数据。我用写字板打开它,它仍然是空的。最后,我内心的小天才敦促我查看文件大小,毫不奇怪它是 0 字节。所以我重建并重新运行程序,没有效果。最后,我决定在 StackOverflow 上向非常聪明的人询问我缺少什么,我在这里 :)
编辑:
在上述聪明人发表了一些意见后,我决定听从他们的建议,将程序改写成这样:
建造它。跑了。而且......控制台清楚地显示,令我惊讶的是:“之后:不好......”。所以我编辑了我的帖子以提供新信息,并开始等待答案来解释为什么会这样以及我能做什么。:)
c++ - 如何可移植地将 std::wstring 写入文件?
我有一个wstring
这样的声明:
文字将是 UTF-8 编码的,因为我的源文件是。
[编辑:根据 Mark Ransom 的说法,情况不一定如此,编译器将决定使用什么编码 - 让我们假设我从一个以 UTF-8 编码的文件中读取这个字符串]
我非常想把它读入文件读取(当文本编辑器设置为正确的编码时)
但ofstream
不是很合作(拒绝接受wstring
参数),wofstream
据说需要知道语言环境和编码设置。我只想输出这组字节。通常如何做到这一点?
编辑:它必须是跨平台的,并且不应依赖于 UTF-8 的编码。我只是碰巧有一组字节存储在 a 中wstring
,并且想要输出它们。它很可能是 UTF-16 或纯 ASCII。