问题标签 [codecvt]
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++ - 访问 wchar_t* 的代码点
我有一个函数,它得到一个wchar_t*
作为输入。现在在这个函数中我必须处理代码点。
由于这个程序应该在多个平台上运行,我对wchar_t*
.
我试图从wchar_t*
到char32_t*
via进行转换std::codecvt<char32_t, wchar_t, std::mbstate_t>
。可悲的是,这种专业化似乎并不存在。
然后我想我也许可以简单地将wchar_t*
用作只读输入缓冲区icu::UnicodeString
,但似乎我首先必须转换为UChar*
via u_strFromWCS
。但话又说回来,我首先需要分配一个UChar
缓冲区,其中包含正确数量的代码单元UChar
。
有人能告诉我在 a 中访问代码点的最有效方法wchar_t*
是什么吗?
例子:
如果我没记错的话,下面的示例应该使用每个代码点的两个代码单元。
c++ - stl codecvt错误c ++
我想使用 codecvt 将 std:wstring 转换为 std::string 像这样
我正在使用 vs2012,我得到以下编译错误:
所有这些错误都是从文件 xlocbuf 生成的
_Codevct 在那里被定义为模板,它有什么问题?请帮忙!
gcc - Clang 或 GCC 不支持 codecvt 吗?
我什至无法从 cppreference.com 获得基本的 codecvt 示例以在 GCC 4.9 或 Clang 3.4 上编译,例如:
c++11 - 在语言环境/编解码器中是否有适当的方面来测试字符细节
那么在 C++ codecvt/locale 库中是否有一个适当的方面可以用来测试一个字符是否“是”某物?IE 来测试一个字符是否是任何形式的换行符,或者表示数字或空格等?
还是必须手动/使用依赖正则表达式?
c++11 - 如何逐行将 utf-16 文件读入 utf-8 std::string
我正在使用需要 utf8 编码的 std::string 变量的代码。我希望能够处理用户提供的可能具有 utf-16 编码的文件(我在设计时不知道编码,但最终希望能够处理 utf8/16/32),请阅读它行逐行,并将每一行作为 utf8 编码的 std::string 转发到代码的其余部分。
我有 c++11(实际上是 c++11 的当前 MSVC 子集)和 boost 1.55.0 可以使用。我最终需要代码才能在 Linux 和 Windows 变体上工作。目前,我只是在 Windows 上使用 Visual Studio 2013 Update 4 进行原型设计,在 Windows 7 上运行。我对其他依赖项持开放态度,但他们需要有一个已建立的跨平台(即 windows 和 *nix)轨道记录,不应该是 GPL/LGPL。
我一直在假设我似乎无法找到验证方法,并且我的代码不起作用。
一个假设是,由于我最终希望这些文件中的每一行都包含在 std::string 变量中,因此我应该使用带有正确构造的 codecvt 的 std::ifstream ,以便可以将传入的 utf16 流转换为 utf8。
这个假设现实吗?我认为,另一种选择是我必须对文本文件进行一些编码检查,然后根据结果选择 wifstream/wstring 或 ifstream/string,这似乎比我开始时更没有吸引力. 当然,如果这是正确的(或唯一现实的)道路,我愿意接受。
我意识到无论如何我可能需要做一些编码检测,但现在,我不太关心编码检测部分,只关注将 utf16 文件内容转换为 utf8 std::string。
我尝试了各种不同的语言环境和编解码器组合,但都没有奏效。以下是我认为可能有效但无效的最新版本:
我在这段代码中看到的行为是每次调用 getline() 的结果都是一个空字符串,无论文件内容如何。
如果我省略上述方法的第 3 行和第 5 行,则相同的代码在同一文件的 utf8 编码版本上可以正常工作(意味着每个 getline() 调用都返回一个正确编码的非空字符串)。
无论出于何种原因,我在 SO 或http://en.cppreference.com/或野外其他地方的任何地方都找不到任何试图做同样事情的人的例子。
欢迎所有想法/建议(符合上述要求)。
visual-studio - 使用 VS 2015 RC 的链接器错误,找不到与 std::codecvt 相关的符号
我收到与 STL 相关的链接错误,使用 Microsoft Visual Studio Community 2015 RC(版本 14.0.22823.1 D14REL)
我正在链接一个 C++ DLL 并成功使用了 STL 中的许多函数,但它找不到与 std::codecvt 相关的内容:
导致此问题的源代码参考:
我的代码生成是针对多线程 dll 的,我已经通过详细链接验证了在链接时正在搜索 MSVCPRT.lib。
有任何想法吗 ?
c++11 - wstring_convert 错误的字节序
我最近发现了<codecvt>
标头,所以我想在 UTF-8 和 UTF-16 之间进行转换。
我使用来自 C++11的codecvt_utf8_utf16
方面。wstring_convert
我遇到的问题是,当我尝试将 UTF-16 字符串转换为 UTF-8,然后再次转换为 UTF-16 时,字节序会发生变化。
对于此代码:
我得到这个输出:
UTF-16
[b098] [b294] [d0dc] [c624]
UTF-16 到 UTF-8
[eb] [82] [98] [eb] [8a] [94] [ed] [83] [9c] [ec] [98] [a4]
转换回 UTF-16
[98b0] [94b2] [dcd0] [24c6]
wstring_convert
当我更改to的第三个模板参数时std::little_endian
,字节被反转。
我错过了什么 ?
c++ - 将具有二进制字节序列的 std::string 转换为具有当前语言环境字符集的 std::wstring
目前我两次读取同一个文件,因为我需要两种不同的表示形式:(a)未经任何转换的原始字节序列,(b)将字节转换为当前执行字符集的文本表示形式。基本上,代码如下所示:
显然,代码两次读取同一个文件。我想避免这种情况并直接转换binaryContent
为textContent
内存。
请注意,这不仅仅是简单char
的wchar_t
转换,因为如果当前语言环境的字符编码locale("")
与执行字符编码不同,它也可能涉及真正的字符转换。这样的转换可能虽然是必要的,即使textContent
是窄字符串也是如此。
在上面的示例中,第 2 部分中字符转换的魔力发生在template<typename _CharT, typename _Traits> bool basic_filebuf<_CharT, _Traits >::_M_convert_to_external( _CharT* __ibuf, streamsize __ilen )
并fstream.tcc
涉及使用codecvt
语言环境的方面。
我希望有一种方法可以wistringstream
从binContent
对象而不是 a构造一个对象wifsteam
,然后wistringstream
用适当的语言环境填充 。但这似乎不起作用,因为wistringstream
已经期望宽字符的所有构造函数wistringstream
似乎也没有实现wifstream
.
codecvt
有没有比手动使用更好的方法(即更简洁、更不容易出错)的方法?
c++ - 用值修饰符 ('-', '%') 在结尾解析字符串
我试图掌握解析。
我有一些数据的de-de
格式在字符串末尾带有附加信息。
我设法使 de-de 部分正确,但我很难正确解析-
和%
解析。我继续阅读,codecvt
但我不明白这个话题。
这是我到目前为止所理解的内容的反映,以及我需要做的一个例子。
输出是:
我怎样才能灌输我的流,以便它像我需要的那样读取-
和签名?%