使用unicode还是不使用unicode

to unicode or not to unicode

本文关键字:unicode 使用      更新时间:2023-10-16

我从注册表中获得一个值。该值可能包含双字节字符。稍后,我将不得不通过网络 将其传输到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)

尽可能使用Unicode将使您的工作更轻松。注册表本地包含Unicode,并在使用ReqQueryValueExA时动态转换为MBCS,为什么要进行不必要的转换呢?

将UTF-16转换为UTF-8可能对网络上的信息有意义,但如果您控制连接的两端,则没有必要。

不,不是这样的。从第一个代码片段返回的字符串根据当前系统代码页进行编码。可能是双字节编码。可能是任何东西。当然,大问题是,在互联网连接的另一端的c#代码没有办法猜出代码页可能是什么。

所以不要使用第一个代码片段。第二个获得utf16字符串,Windows中使用的本机编码,结果需要是std::wstring。还有c#使用的编码,所以你可以发送二进制字符串。虽然这通常不是一个好主意,但是xml很流行。您可以自行设置连线格式