Articles of wstring

c + +不能将string转换为wstring

我想将一个stringvariables转换为wstring由于一些德语字符在variables上执行substr时会导致问题。 当这些特殊字符出现之前,起始位置就是伪造的。 (例如:对于“ä”大小()返回2而不是1) 我知道以下转换工作: wstring ws = L"ä"; 因为,我想转换一个variables,我想知道是否有一个替代方式,如 wstring wstr = L"%s"+str //this is syntaxically wrong, but wanted sth alike 除此之外,我已经尝试了下面的例子将string转换为wstring: string foo("ä"); wstring_convert<codecvt_utf8<wchar_t>> converter; wstring wfoo = converter.from_bytes(foo.data()); cout << foo.size() << endl; cout << wfoo.size() << endl; ,但我得到像这样的错误 'wstring_convert' was not declared in this scope 我使用的是Ubuntu 14.04,我的main.cpp是用cmake编译的。 谢谢你的帮助!

如何使我的`std :: string url_encode_wstring(const std :: wstring&input)`在Linux上工作?

所以我们有这样的function: std::string url_encode_wstring(const std::wstring &input) { std::string output; int cbNeeded = WideCharToMultiByte(CP_UTF8, 0, input.c_str(), -1, NULL, 0, NULL, NULL); if (cbNeeded > 0) { char *utf8 = new char[cbNeeded]; if (WideCharToMultiByte(CP_UTF8, 0, input.c_str(), -1, utf8, cbNeeded, NULL, NULL) != 0) { for (char *p = utf8; *p; *p++) { char onehex[5]; _snprintf(onehex, sizeof(onehex), "%%%02.2X", (unsigned […]

如何定义“wstring”?

在Ubuntu中构build时出现错误。 错误如下: ISO C++ forbids declaration of `wstring' with no type 为了解决这个问题,我必须自己定义这个wstring 。 那么谁知道如何定义wstring ?

为什么我不能读取长度超过4094个字符的UTF-16文件?

一些信息: 我只在Linux上试过 我已经用GCC(7.2.0)和Clang(3.8.1) 它需要C ++ 11或更高的理解 当我运行它会发生什么 我得到期望的string“abcd”重复,直到它达到4094个字符的位置。 之后,它输出的是这个符号“?” 直到文件结束。 我怎么看这个? 我认为这不是预期的行为,它必须是一个错误的地方。 您可以testing的代码: #include <iostream> #include <fstream> #include <locale> #include <codecvt> void createTestFile() { std::ofstream file ("utf16le.txt", std::ofstream::binary); if (file.is_open()) { uint16_t bom = 0xFEFF; // UTF-16 little endian BOM uint64_t abcd = 0x0064006300620061; // UTF-16 "abcd" string file.write((char*)&bom,2); for (size_t i=0; i<2000; i++) { […]

如何读取一个在linux中编写的std :: wstring到windows

我们有一个在Windows和Linux上运行的程序。 它将二进制std :: wstrings写入一个文件。 我们需要能够读取从linux写入Windows的文件。 我们把string写成wchar_t的列表。 在linux上,每个wchar_t占用4个字节。 在Windows上,每个wchar_t占用2个字节。 当读取linux写入Windows的文件时,如何取得四个字节wchar_t并将其放入2个字节的wchar_t中? 谢谢,亚当

什么是Visual Studio 2015的UTF-16编码string的内存布局?

WinAPI使用wchar_t缓冲区。 据我所知,我们需要使用UTF-16编码我们所有的参数到WinAPI。 我们有两个版本的UTF-16: UTF-16be和UTF-16le 。 假设编码一个string“Example” 0x45 0x78 0x61 0x6d 0x70 0x6c 0x65 。 用UTF-16be字节应该这样放置: 00 45 00 78 00 61 00 6d 00 70 00 6c 00 65 。 UTF-16le应该是45 00 78 00 61 00 6d 00 70 00 6c 00 65 00 。 (我们正在省略BOM)。 同一个string的字节表示是不同的。 根据文档Windows使用UTF-16le 。 这意味着我们应该用UTF-16le对所有的string进行编码,否则将无法工作。 同时,我的编译器(VS2015)使用UTF-16be作为硬编码到我的代码中的string(像L"my test string" )。 但是WinAPI可以很好地处理这些string。 […]

有什么内置函数在Linux中将wstring或wchar_t *转换为UTF-8?

我想将wstring转换为UTF-8编码,但我想使用Linux的内置函数。 有没有什么内置的函数在Linux 中简单的调用将wstring或wchar_t*转换为UTF-8? 例: wstring str = L"file_name.txt"; wstring mode = "a"; fopen([FUNCTION](str), [FUNCTION](mode)); // Simple invoke. cout << [FUNCTION](str); // Simple invoke.

在wcscpy_s之后读取string的字符时出错

我有一个wcscpy_s函数的问题。 wcscpy_s返回我函数的参数( stringOne和stringTwo )不可读。 这里是简单的演示来显示问题。 void testFunc(LPCWSTR stringOne, LPCWSTR stringTwo) { wchar_t* defaultVal = L"Default"; wchar_t tmp[100]; int lenBefore = wcslen(stringOne); // Works auto result = wcscpy_s(tmp, sizeof(tmp), defaultVal); int len = wcslen(tmp); int len2 = wcslen(stringOne); // Throws Exception Access violation } int main() { testFunc(L"Test", L"Test"); }

如何正确使用MultiByteToWideChar

我正在使用MultiByteToWideChar将我的string转换为一个wstring。 我第一次尝试为我的string获得所需的大小。 根据文档传递0作为最后一个参数应该做到这一点。 使用MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0); 返回0作为wstring缓冲区所需的大小。 我已经validation了str也是一个非空string。 我在这里做错了什么?

Conver QString到BSTR,反之亦然

我想将QString转换为BSTR ,反之亦然。 这是我尝试将QString转换为BSTR : std::wstring str_ = QString("some texts").toStdWString(); BSTR bstr_ = str_.c_str(); 并将BSTR转换为QString : BSTR bstr_; wchar_t *str_ = bstr_; QString qstring_ = QString::fromWCharArray(str_); 它是否正确? 换句话说,有没有数据丢失? 如果是,那么正确的解决scheme是什么?