我从注册表中得到了一个值。此值中可能包含双字节字符。稍后,我将不得不通过将其通过网络传输到C#客户端以显示。C#都是unicode。如果您称它为非unicode,则该函数返回MBCS。
我该用什么?
string result = string(cbData);
RegQueryValueExA(h_sub_key, "DisplayName", NULL, NULL, (LPBYTE) &result[0], &cbData)或
string result = string(cbData);
RegQueryValueExW(h_sub_key, L"DisplayName", NULL, NULL, (LPBYTE) &result[0], &cbData)发布于 2011-09-27 17:46:10
只要有可能,使用Unicode将使您的生活更轻松。当您使用ReqQueryValueExA时,注册表将本地包含Unicode并动态转换为MBCS,您为什么要进行不需要的转换?
从UTF-16转换到UTF-8可能对网络上的信息有意义,但是如果您控制连接的两端,就没有必要了。
发布于 2011-09-27 17:46:32
不,不是这样的。从第一个代码段返回的字符串是根据当前系统代码页编码的。可能是双字节编码。可能是任何东西。当然,大问题是,互联网连接的另一端的C#代码无法猜测代码页可能是什么。
所以不要使用第一个片段。第二种方法是在utf16 ( Windows中使用的本机编码)中获取字符串,结果需要是std::wstring。还有C#使用的编码,这样您就可以发送二进制字符串了。虽然这通常不是一个好主意,但xml很受欢迎。由你来设置导线格式。
https://stackoverflow.com/questions/7573200
复制相似问题