我正在尝试找出从远程计算机以统一方法检索unicode数据的最安全方法,并确保数据保持一致和可读性。

计算机A:中文用户,使用英语Windows 7混合语言,某些注册表值包含中文字母,例如L“您好”

计算机B:美国英语,我的函数未返回任何Unicode值

计算机C:向计算机A和B引入代理。

代理:从内部评估计算机的运行状况和安全性。一个了解unicode的部分只是获取注册表值,即:

int Utilities::GetRegistryStringValue(HKEY h_sub_key, WCHAR* value_name, wstring &result)
{
DWORD cbData = 8;
LPDWORD type = NULL;

//Get the size and type of the key
long err = RegQueryValueEx(h_sub_key, value_name, NULL, type, NULL, &cbData);

if (err != ERROR_SUCCESS)
{
    if (err != ERROR_FILE_NOT_FOUND)
        debug->DebugMessage(Error::GetErrorMessageW(err));
    return err;
}

result.resize(cbData / sizeof(WCHAR));

LPWSTR res = new WCHAR[(cbData + sizeof(L'\0')) / sizeof(WCHAR)];

err = RegQueryValueEx(h_sub_key, value_name, NULL, NULL, (LPBYTE) &res[0], &cbData);

if(err != ERROR_SUCCESS && err != ERROR_FILE_NOT_FOUND)
{
    debug->DebugMessage(Error::GetErrorMessageW(err));
    return err;
}

res[cbData / sizeof(WCHAR)] = L'\0';

result = wstring(res);

return ERROR_SUCCESS;


}

这些值将存储在XML文件中。
该XML文件应采用UTF16还是UTF8?
我需要传回远程系统的代码页进行翻译吗?
我还有什么其他问题?

最佳答案

UTF8更标准(用于网络),因为它没有字节序问题。对于UTF16,您需要指定传输的字节序。如果您使用unicode格式,则不需要代码页。

如果它们在Windows计算机上,则可以使用标准Windows调用(例如WideCharToMultiByte)进行翻译。

std::wstring buffer_with_utf16;
const char DefaultChar = 1; //not null, but not normal either
bool had_conversion_error = false;
int alength = WideCharToMultiByte(CP_UTF8, 0,
              buffer_with_utf16.cstr(), buffer_with_utf16.size(),
              NULL, 0,
              &DefaultChar, &had_conversion_error);
if (alength == 0)
    throw std::logic_error("Bad UTF8 conversion"); //use GetLastError
std::string buffer_with_utf8(alength+1);
int error = WideCharToMultiByte(CP_UTF8, 0,
              buffer_with_utf16.cstr(), buffer_with_utf16.size(),
              &buffer_with_utf8[0], buffer_with_utf8.size(),
              &DefaultChar, &had_conversion_error);
if (error == 0)
    throw std::logic_error("Bad UTF8 conversion"); //use GetLastError

关于c++ - 跨网络Unicode到xml,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7932074/

10-15 17:52