linux cp acp,CP_THREAD_ACP与CP_ACP

博客讨论了在Windows上使用MultiByteToWideChar时,CP_ACP和CP_THREAD_ACP的区别。在俄语环境中,由服务启动的F.exe进程导致了线程区域设置不一致,造成乱码问题。建议在不确定线程代码页时避免使用CP_THREAD_ACP,因为线程和系统区域设置可能不一致。
摘要由CSDN通过智能技术生成

在使用MultiByteToWideChar的时候,大部分都知道上述两个参数,MSDN上的解释也是简单到极致。通常我们会选择使用CP_ACP,但是总有人会在没有真正明白它们之间的区别前使用CP_THREAD_ACP。

上周收到一个日方的Bug报告。Bug的上下文基本是这样的:有一个功能是记录设备信息一览的,并可以将这些信息输出到一个文件(格式有很多)。这个文件可以手动实时获取,也可以设置日期和时间定时获取。

Bug的现象是:在英语和日语的环境下,一切都OK。但是在俄语下定时获取文件的功能失效,手动获取确实OK的。

我们模拟俄语的环境是在非俄语的OS下,改变控制面板中的“地域”中的信息为俄语,包括User Locale和System Locale还有位置。

int usize = ::MultiByteToWideChar(CP_THREAD_ACP, 0, name, (int)strlen(name) + 1, NULL, 0);

wchar_t *unicode = new wchar_t[usize];

if(NULL != unicode)

{

ZeroMemory(unicode, usize * sizeof(wchar_t));

// Convert

::MultiByteToWideChar(CP_THREAD_ACP, 0, name, (int)strlen(name), unicode, usize);

// Make Key-source

unsigned char key_message[DM_MAX_SIZE_OF_PARAMS];

memcpy( key_message, SNMPV3_HASH_KEY, strlen(SNMPV3_HAS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值