请教wscanf 格式化中文字符乱码怎么解决?

glengan 2017-07-26 12:27:54

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <TlHelp32.h>
#include <tchar.h>

DWORD GetProcessIdByName(LPCTSTR szProcessName)
{
PROCESSENTRY32 pe32;
HANDLE hSnapshot;

ZeroMemory(&pe32, sizeof(PROCESSENTRY32));
pe32.dwSize = sizeof(PROCESSENTRY32);

hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot)
{
return FALSE;
}

if (!Process32First(hSnapshot, &pe32))
{
return FALSE;
}
do
{
if (0 == lstrcmpi(pe32.szExeFile, szProcessName))
{

CloseHandle(hSnapshot);
return pe32.th32ProcessID;
}
} while (Process32Next(hSnapshot, &pe32));


CloseHandle(hSnapshot);
return FALSE;
}

int main()
{
TCHAR szProcessName[MAX_PATH] = { 0 };
DWORD dwPID;

while (wscanf(_T("%ls"),szProcessName ))
{
dwPID = GetProcessIdByName(szProcessName);
wprintf(_T("The id of the process %s is %d\n"), (TCHAR*)szProcessName, dwPID);
}

return 0;
}


wprintf出来的也没有问题,wscanf的时候是乱码.求指教!
...全文
224 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
战在春秋 2017-07-26
  • 打赏
  • 举报
回复
完全理解得费些功夫,涉及到字符集、编码方式、unicode等等概念。 setlocale函数的链接如下: https://msdn.microsoft.com/en-us/library/x99tb11d.aspx
战在春秋 2017-07-26
  • 打赏
  • 举报
回复
引用
感谢楼下继续帮我解决这个问题
先给出解决方案,在main函数的第一行:

#include <locale.h>  //头文件
setlocale (LC_ALL,""); //添加到main函数的第一行
原因是因为执行字符集和控制台字符集必须保持一致(GBK)。 代码中setlocale (LC_ALL,"");的作用是将执行字符集与操作系统的字符集设置成一样。 更详细的原因请查询相关资料,可以从setlocale函数入手:
glengan 2017-07-26
  • 打赏
  • 举报
回复
http://www.cnblogs.com/dejavu/archive/2012/09/16/2687586.html 这个可以作为到此一游的纪念了!结贴!!
glengan 2017-07-26
  • 打赏
  • 举报
回复
ok,问题终于解决了,感谢fight_in_dl的解决方法,我只知道是编码问题,没方法解决.刚才有在csdn上找到了一个例子,再次感谢所有围观的各位!!
赵4老师 2017-07-26
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
glengan 2017-07-26
  • 打赏
  • 举报
回复

百度了一通,好像跟代码页没什么关系!
2楼请注意,pe32得到的文件名是正常的,控制台输入的得到不正常,所以比较的时候就出问题了?
继续求解!感谢楼下继续帮我解决这个问题.
jena_wy 2017-07-26
  • 打赏
  • 举报
回复
是Unicode的编码,所以是乱码
冬南风 2017-07-26
  • 打赏
  • 举报
回复
1,控制台的字符格式默认不是utf-8的,所以wscanf读入的中文是乱码 2,wprintf没有问题,比如控制台的字符格式是A,wscanf是按照A格式读入的,wprintf也是按照A格式输出的,所以其没问题 chcp可以修改控制台字符格式,详情请自行搜索
zwfgdlc 2017-07-26
  • 打赏
  • 举报
回复
main换成wmain

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧