向注冊表寫入中文,在一臺機器運行正常,使用RegSetValueExA 及 RegSetValueExW均正常。在另一臺機器上,RegSetValueExA 及 RegSetValueExW,都出現亂碼,這是怎么回事,哪位大神幫忙解答一下
bool SetRegValue(HKEY root, const LPCSTR regPath, const LPCSTR name, const string strReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret;
ret = RegOpenKeyExA(root, regPath, 0, dwAccess, &hKey);
DWORD len = strReadRes.size();
if (ret == ERROR_SUCCESS) {
if (ERROR_SUCCESS == RegSetValueExA(hKey, name, 0, REG_SZ, (CONST BYTE*)strReadRes.c_str(), len + 1)) {
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
bool SetRegValueW(HKEY root, LPCWSTR regPath, LPCWSTR name, const wstring wstrReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret;
ret = RegOpenKeyExW(root, regPath, 0, dwAccess, &hKey);
DWORD len = wstrReadRes.size() * 2;
if (ret == ERROR_SUCCESS) {
if (ERROR_SUCCESS == RegSetValueEx(hKey, name, 0, REG_SZ, (CONST BYTE*)wstrReadRes.c_str(), len + 1)) {
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
uj5u.com熱心網友回復:
怎么沒人回復,自己頂一下uj5u.com熱心網友回復:
讀注冊表:bool CRegedit::ReadRegValueW(HKEY root, LPCWSTR regPath, LPCWSTR name, wstring& strReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret;
ret = RegOpenKeyEx(root, regPath, 0, dwAccess, &hKey);
if (ret == ERROR_SUCCESS) {
RegQueryValueEx(hKey, name, 0, &dwType, NULL, &dwSize);
ret = RegQueryValueEx(hKey, name, 0, &dwType, (LPBYTE)&szLocation, &dwSize);
if (ret == ERROR_SUCCESS) {
strReadRes = std::wstring(szLocation);
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
bool CRegedit::ReadRegValue(HKEY root, LPCSTR regPath, LPCSTR name, string& strReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret;
ret = RegOpenKeyExA(root, regPath, 0, dwAccess, &hKey);
if (ret == ERROR_SUCCESS) {
RegQueryValueExA(hKey, name, 0, &dwType, NULL, &dwSize);
ret = RegQueryValueExA(hKey, name, 0, &dwType, (LPBYTE)&szLocation, &dwSize);
if (ret == ERROR_SUCCESS) {
strReadRes = WStringToString(szLocation);
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
uj5u.com熱心網友回復:
我寫的時候是是格式化的字串(英文冒號作為分隔符):軟體名+英文冒號+整數+冒號+整數,(在一臺機器上)寫入這冊表是亂碼,同時使用ReadRegValueW讀取時,有的漢字可以讀取,有的漢字不能讀取。比如“IE瀏覽器:2345:10",器字讀不出來,冒號也讀不到。但是"愛奇藝影音:2345:10",漢字和冒號都能讀出來(即使查看注冊表是亂碼)。 哪位對字符編碼比較精通的幫忙解答一下?uj5u.com熱心網友回復:
個人估計是出現在碼轉換上strReadRes = std::wstring(szLocation);
strReadRes = WStringToString(szLocation);
建議 寫的時候UNICODE 轉換成UTF8, 讀的時候UTF8轉到UNICODE
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/52885.html
標籤:基礎類
上一篇:關于ShellExecuteEx
