- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将几个 CStringW 字符串转换为 CStringA 字符串。其中一个字符串(我们称之为 otherLangString)是其他语言(中文、阿拉伯语等)。像这样使用时,所有其他字符串都没有问题转换:
CW2A((LPCWSTR)some_String);
但是当用于 otherLangString 时,我得到的是“??????”所以为了解决这个问题,我做了这个并且成功了
CW2A(some_String, CP_UTF8);
现在在代码中,除了一个看起来像第二个示例之外,所有转换看起来都像第一个示例。
为了保持一致性,我混合了以上两个,并为所有人都做了这个。
CW2A((LPCWSTR)some_String, CP_UTF8);
我的问题是, following 和 following 之间有什么区别?
- CW2A((LPCWSTR)some_String, CP_UTF8) and CW2A(some_String, CP_UTF8);
- CW2A((LPCWSTR)some_String) and CW2A(some_String, CP_UTF8);
最佳答案
CW2A
是 CW2AEX<>
的类型定义,它的c'tor是documented .使用 2 个参数的 c'tor 允许您显式指定用于转换的代码页:
nCodePage:
The code page used to perform the conversion. See the code page parameter discussion for the Windows SDK function MultiByteToWideChar for more details.
如果您不指定代码页,则使用当前线程的 ANSI 代码页进行转换(您很少需要那样)。这在 ATL and MFC String Conversion Macros 下进行了解释:
By default, the ATL conversion classes and macros will use the current thread's ANSI code page for the conversion. If you want to override that behavior for a specific conversion using macros based on the classes CA2WEX or CW2AEX, specify the code page as the second parameter to the constructor for the class.
在你的情况下,
CW2A((LPCWSTR)some_String);
使用线程的当前 ANSI 代码页从 UTF-16 转换为窄字符串。只有在使用相同的 ANSI 代码页进行解释时,结果才有意义。更糟糕的是,ANSI 代码页编码的字符串不能表示所有 Unicode 字符。
另一段代码
CW2A(some_String, CP_UTF8);
从 UTF-16 转换为 UTF-8。这通常是有利的,因为转换是无损且明确的。两种编码都可以表示同一组字符。编码后的字符串可以由任何能够解释 UTF-8 的阅读器解码。
CStringA
中的UTF-8 编码字符串。在 Windows 中。通过网络发送内容或将它们写入磁盘是安全的。但是如果你想将它传递给 Windows API(例如用于显示),你必须先转换为 UTF-16。 Windows API 的 ANSI 版本不支持 UTF-8。
关于c++ - CW2A(LPCWSTR)str) 和 CW2A(LPCWSTR)str, CP_UTF8) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39398621/
我正在尝试将几个 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:
我是一名优秀的程序员,十分优秀!