- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试从字符串转换为 LPCWSTR(我使用 multi-bite)。
1)例如:
LPCWSTR ToLPCWSTR(string text)
{
LPCWSTR sw = (LPCWSTR)text.c_str();
return sw;
}
2) 返回汉字:
LPCWSTR ToLPCWSTR(string text)
{
std::wstring stemp = std::wstring(text.begin(), text.end());
LPCWSTR sw = (LPCWSTR)stemp.c_str();
return sw;
}
但是,它们总是显示正方形:
已编辑:我的代码由 Barmak Shemirani 编辑
std::wstring get_utf16(const std::string &str, int codepage)
{
if (str.empty()) return std::wstring();
int sz = MultiByteToWideChar(codepage, 0, &str[0], (int)str.size(), 0, 0);
std::wstring res(sz, 0);
MultiByteToWideChar(codepage, 0, &str[0], (int)str.size(), &res[0], sz);
return res;
}
string HttpsWebRequest(string domain, string url)
{
LPCWSTR sdomain = get_utf16(domain, CP_UTF8).c_str();
LPCWSTR surl = get_utf16(url, CP_UTF8).c_str();
//(Some stuff...)
}
返回: https://i.gyazo.com/ea4cd50765bfcbe12c763ea299e7b508.png
已编辑:使用从 UTF8 传递到 UTF16 的另一个代码,仍然是相同的结果。
std::wstring utf8_to_utf16(const std::string& utf8)
{
std::vector<unsigned long> unicode;
size_t i = 0;
while (i < utf8.size())
{
unsigned long uni;
size_t todo;
bool error = false;
unsigned char ch = utf8[i++];
if (ch <= 0x7F)
{
uni = ch;
todo = 0;
}
else if (ch <= 0xBF)
{
throw std::logic_error("not a UTF-8 string");
}
else if (ch <= 0xDF)
{
uni = ch & 0x1F;
todo = 1;
}
else if (ch <= 0xEF)
{
uni = ch & 0x0F;
todo = 2;
}
else if (ch <= 0xF7)
{
uni = ch & 0x07;
todo = 3;
}
else
{
throw std::logic_error("not a UTF-8 string");
}
for (size_t j = 0; j < todo; ++j)
{
if (i == utf8.size())
throw std::logic_error("not a UTF-8 string");
unsigned char ch = utf8[i++];
if (ch < 0x80 || ch > 0xBF)
throw std::logic_error("not a UTF-8 string");
uni <<= 6;
uni += ch & 0x3F;
}
if (uni >= 0xD800 && uni <= 0xDFFF)
throw std::logic_error("not a UTF-8 string");
if (uni > 0x10FFFF)
throw std::logic_error("not a UTF-8 string");
unicode.push_back(uni);
}
std::wstring utf16;
for (size_t i = 0; i < unicode.size(); ++i)
{
unsigned long uni = unicode[i];
if (uni <= 0xFFFF)
{
utf16 += (wchar_t)uni;
}
else
{
uni -= 0x10000;
utf16 += (wchar_t)((uni >> 10) + 0xD800);
utf16 += (wchar_t)((uni & 0x3FF) + 0xDC00);
}
}
return utf16;
}
最佳答案
你有两个问题。
LPCWSTR
是指向wchar_t
的指针,std::string::c_str()
返回一个const char*
。这两种类型不同,因此从 const char*
转换为 LPCWSTR
是行不通的。std::basic_string::c_str
返回的指针指向的内存由字符串对象拥有,并在字符串超出范围时释放。您需要分配内存并复制字符串。
为新的宽字符串分配内存的最简单方法是只返回一个 std::wstring
。然后,您可以将 c_str()
返回的指针传递给任何采用 LPCWSTR
的 API 函数:
std::wstring string_to_wstring(const std::string& text) {
return std::wstring(text.begin(), text.end());
}
关于c++ - 在 C++ 中将字符串转换为 LPCWSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38154985/
我正在尝试将几个 CStringW 字符串转换为 CStringA 字符串。其中一个字符串(我们称之为 otherLangString)是其他语言(中文、阿拉伯语等)。像这样使用时,所有其他字符串都没
我还是 C++ 的新手,但我遇到了一个我无法解决的问题,这是我的错误信息: 'HMODULE GetModuleHandleW(LPCWSTR)': cannot convert argument 1
char lpszUsername[255]; DWORD dUsername = sizeof(lpszUsername); GetUserNameA(lpszUsername, &dUsernam
我正在尝试创建一个(非常)简单的 Win32 GUI 程序,但出于某种原因,编译器(我使用的是 VC++ 2008 Express)要我手动将每个字符串或 char* 类型转换为 LPCWSTR: 我
我有一个程序可以生成/“掷”两个骰子。我想将这两个值输出到 MessageBox,例如:“掷骰子:1 和 3”。 我遇到的问题是如何将这些整数连接到字符串。到目前为止我的代码如下: MessageBo
我会怎样... string modelPath = "blah/blah.obj" 并将它与...连接起来 L" not found." 同时将其作为 LPCWSTR 传递。我试着做 (LPCWST
我正在整理我很久以前写的一些代码,将其放入方法等中,当我尝试从目录搜索的输入提示中获取输入字符串和 LPCWSTR 时。 void GetInfo(string &stdStr, LPCWSTR &w
您好,我正在用 C++ 为植物大战僵尸训练器编写代码,只有当我尝试启动它时,它因以下错误而失败: error: cannot convert 'LPCWSTR {aka const wchar_t*}
为了将整数值传递给 SetWindowTextW(),(我在 C++ 中使用 unicode 构建,使用 Visual Studio 2010),此函数是否足以返回 LPCWSTR?我很确定这里有些东
我有两个 LPCWSTR 变量。我想创建一个新变量,它将具有第一个和第二个变量的值。 我试过了,但没用。 LPCWSTR d = L"sd"; LPCWSTR f = L"f"; LPCWSTR df
我正在使用 boost-filesystem 来搜索具体路径中的所有文件。我还想检索此文件的创建数据、上次打开和上次更新,因此当我在 Windows 中工作时,我需要使用 GetFileTime(这需
我有一个需要保存文件的类,构造函数得到一个名为 fullPath 的 LPWSTR,然后我尝试这样做(curPath 是一个 LPCWSTR 类变量): curPath = (std::wstring
我想在 C++ (VS 2010) 中将 LPCWSTR 转换为 wstring。我想在 OutputDebugStringW() 中使用它。 谢谢。 最佳答案 我们只需将 LPCWSTR 传递给 w
我有以下 C++ 代码,似乎在我尝试放置字符串的任何地方,我都必须对其进行转换以避免“无法将参数 2 从 const char[x] 转换为 LPCWSTR。我知道我可以通过简单的转换来解决这个问题,
我正在使用一个开源代码,他们创建了一个新的字符串类,它们的语法如下: OpenEvent(EVENT_ALL_ACCESS, FALSE, String() << L"SOMETEXT" <<
当我尝试使用 unicode LPCWSTR 类型时,我收到到处都是不兼容的指针类型。 无论我做什么,我都完全卡住了,试图寻找答案很多次,但仍然没有希望! 我的代码: #include #inclu
我觉得我在这里遗漏了一些非常明显的东西...... 在我的程序中,我使用 GetWindowText() 从编辑框中读取用户输入, 后跟此代码: if (x == L"R" || x == L"C"
我有一个使用 D3DXCreateTextureFromFile() 加载一些图像的 direct3d 项目。此函数采用 LPCWSTR 作为文件路径。我想加载一系列连续编号的纹理(即 MyImage
这个问题在这里已经有了答案: What does LPCWSTR stand for and how should it be handled? (3 个答案) 关闭 9 年前。 我在理解和让它正常
#include "stdafx.h" #include #include #include #include using namespace std; class Dir { public:
我是一名优秀的程序员,十分优秀!